一.题目
给你一个 m
行 n
列的矩阵 matrix
,请按照 顺时针螺旋顺序 ,返回矩阵中的所有元素。
示例 1:
输入: matrix = [[1,2,3],[4,5,6],[7,8,9]]
输出: [1,2,3,6,9,8,7,4,5]
二.代码与解析
四个方向四次循环即可,四层循环满足四个条件退出即可,想清楚这一点就可以看懂代码了
class Solution {
public List<Integer> spiralOrder(int[][] matrix) {
List<Integer> ans = new ArrayList<>();
if(matrix.length == 0) return ans;
int l = 0;
int r = matrix[0].length - 1;
int u = 0;
int b = matrix.length - 1;
while(true) {
// 向右走
for(int i = l;i <= r; ++ i) ans.add(matrix[u][i]);
if(++u > b) break;
// 向下走
for(int i = u;i <= b;++ i) ans.add(matrix[i][r]);
if(-- r < l) break;
// 向左走
for(int i = r;i >= l;-- i) ans.add(matrix[b][i]);
if(--b < u) break;
// 向上走
for(int i = b;i >= u;-- i) ans.add(matrix[i][l]);
if(++ l > r) break;
}
return ans;
}
}