给你一个 m 行 n 列的矩阵 matrix ,请按照 顺时针螺旋顺序 ,返回矩阵中的所有元素。
是什么?
矩阵顺时针顺序
怎么做?
从左到右,从上到下,从右到左,从下到上
思考
思路很简单,难在怎么实现?
代码
import java.util.ArrayList;
import java.util.List;
class Solution {
public List spiralOrder(int[][] matrix) {
// 判断特殊情况,去掉,这里return不能接0
if (matrix == null || matrix.length == 0) return new ArrayList<>();
// 定义上下左右
int top = 0, bottom = matrix.length - 1;
int left = 0, right = matrix[0].length - 1;
// 创建列表接收数据
List res = new ArrayList<>();
// 判断边界
while (top <= bottom && left <= right) {
// 从左到右
for (int i = left;i <= right;i++) {
res.add(matrix[top][i]);
// 上界下移
top++;
}
// 从上到下
for (int i = top;i <= bottom;i++) {
res.add(matrix[i][right]);
right--;
}
// 判断边界,避免重复
if (right >= left) {
// 从右到左
for (int i = right; i >= left; i--) {
res.add(matrix[bottom][i]);
bottom--;
}
}
if (bottom >= top) {
// 从小到上
for (int i = bottom; i >= top; i--) {
res.add(matrix[i][left]);
right++;
}
}
}
return res;
}
}
