题目:
给你一个 m 行 n 列的矩阵 matrix ,请按照 顺时针螺旋顺序 ,返回矩阵中的所有元素。
示例 1:
输入:matrix = [[1,2,3],[4,5,6],[7,8,9]]
输出:[1,2,3,6,9,8,7,4,5]
示例 2:
输入:matrix = [[1,2,3,4],[5,6,7,8],[9,10,11,12]]
输出:[1,2,3,4,8,12,11,10,9,5,6,7]
提示:
m == matrix.length
n == matrix[i].length
1 <= m, n <= 10
-100 <= matrix[i][j] <= 100
Related Topics 数组
解题思路关键点:增加一个bool数组,标识该位置是否被遍历过。
代码:
public List<Integer> spiralOrder(int[][] matrix) {
ArrayList<Integer> list = new ArrayList<Integer>();
if (matrix == null || matrix.length == 0) {
return list;
}
int row = matrix.length; //3
int col = matrix[0].length; //4
boolean[][] status = new boolean[row][col];
int len = row * col;
int x = 0, y = 0;
while (true) {
if (list.size() == len) {
break;
}
//向右
while (y < col && !status[x][y] && list.size() < len) {
list.add(matrix[x][y]);
status[x][y] = true;
y++;
}
y--;
x++;
//向下
while (x < row && !status[x][y] && list.size() < len) {
list.add(matrix[x][y]);
status[x][y] = true;
x++;
}
x--;
y--;
//向左
while (y >= 0 && !status[x][y] && list.size() < len) {
list.add(matrix[x][y]);
status[x][y] = true;
y--;
}
y++;
x--;
//向shang
while (x >= 0 && !status[x][y] && list.size() < len) {
list.add(matrix[x][y]);
status[x][y] = true;
x--;
}
x++;
y++;
}
return list;
}