Problem: 54. 螺旋矩阵
题目描述
思路
定义四个标志top、bottom、left、right标记矩阵的四个方位,依次**从左到右(执行后top++);从上到下(执行后right–);从右到左(执行后bottom–);从左到右(执行后left++)**螺旋遍历并将元素添加到一个二维数组中
复杂度
时间复杂度:
O ( M × N ) O(M \times N) O(M×N);其中 M M M是矩阵的行数 N N N为矩阵的列数
空间复杂度:
O ( M × N ) O(M \times N) O(M×N)
Code
public class Solution {
public List<Integer> spiralOrder(int[][] matrix) {
List<Integer> res = new ArrayList<>();
if (matrix.length == 0) {
return res;
}
int rowStart = 0;
int rowEnd = matrix.length - 1;
int colStart = 0;
int colEnd = matrix[0].length - 1;
while (rowStart <= rowEnd && colStart <= colEnd) {
// Traverse Right
for (int j = colStart; j <= colEnd; j ++) {
res.add(matrix[rowStart][j]);
}
rowStart++;
// Traverse Down
for (int j = rowStart; j <= rowEnd; j ++) {
res.add(matrix[j][colEnd]);
}
colEnd--;
if (rowStart <= rowEnd) {
// Traverse Left
for (int j = colEnd; j >= colStart; j --) {
res.add(matrix[rowEnd][j]);
}
}
rowEnd--;
if (colStart <= colEnd) {
// Traver Up
for (int j = rowEnd; j >= rowStart; j --) {
res.add(matrix[j][colStart]);
}
}
colStart ++;
}
return res;
}
}