题目
给你一个 m 行 n 列的矩阵 matrix ,请按照 顺时针螺旋顺序 ,返回矩阵中的所有元素。
示例
输入:matrix = [[1,2,3],[4,5,6],[7,8,9]]
输出:[1,2,3,6,9,8,7,4,5]
提示
- m == matrix.length
- n == matrix[i].length
- 1 <= m, n <= 10
- -100 <= matrix[i][j] <= 100
题解
- 模拟循环
- 按照第一行–>最后一列–>最后一行–>第一列这种外层遍历,依次将二维数组“剥开”
- 这种剥开的方式,会使起始行r与终止行row逐渐靠近,同理列也是如此,故终止条件是起始行=终止行,起始列=终止列
参考代码
class Solution {
public List<Integer> spiralOrder(int[][] matrix) {
if(matrix.length == 0 || matrix[0].length == 0) return new ArrayList<>();
int row = matrix.length, col = matrix[0].length;
int r = 0, c = 0;
List<Integer> res = new ArrayList<>();
while(r < row && c < col) {
// 第一行
for(int i = c; i < col; i++) {
res.add(matrix[r][i]);
}
r++;
// 最后一列
for(int i = r; i < row; i++) {
res.add(matrix[i][col-1]);
}
col--;
//最后一行
for(int i = col-1; i >= c && r < row; i--) {
res.add(matrix[row-1][i]);
}
row--;
// 第一列
for(int i = row-1; i >= r && c < col; i--) {
res.add(matrix[i][c]);
}
c++;
}
return res;
}
}