LeetCode刷题: 螺旋矩阵(day43)
题目描述:
给定一个包含 m x n 个元素的矩阵(m 行, n 列),请按照顺时针螺旋顺序,返回矩阵中的所有元素。
示例 1:
输入:
[
[ 1, 2, 3 ],
[ 4, 5, 6 ],
[ 7, 8, 9 ]
]
输出: [1,2,3,6,9,8,7,4,5]
示例 2:
输入:
[
[1, 2, 3, 4],
[5, 6, 7, 8],
[9,10,11,12]
]
输出: [1,2,3,4,8,12,11,10,9,5,6,7]
上菜了
class Solution {
public List<Integer> spiralOrder(int[][] matrix) {
List<Integer> list = new ArrayList<>();
if (matrix.length == 0 || matrix[0].length == 0) {
return list;
}
int y1 = 0, y2 = matrix.length - 1;
int x1 = 0,x2 = matrix[0].length - 1;
while (y1 <= y2 && x1 <= x2) {
//先是行循环
for (int i = x1; i <= x2; i++) {
list.add(matrix[y1][i]);
}
//这个是扣边界 以下三个跟这个类似的if语句都是扣边界,让x,y不要出去这个边界。
if (y1 == y2) break;
y1 ++;
//列循环
for (int j = y1; j <= y2; j++) {
list.add(matrix[j][x2]);
}
if (x1 == x2) break;
x2--;
//然后再是行循环
for (int i = x2; i >= x1; i--) {
list.add(matrix[y2][i]);
}
if (y1 == y2) break;
y2--;
//最后列循环
for (int j = y2; j >= y1; j--) {
list.add(matrix[j][x1]);
}
if (x1 == x2) break;
x1++;
}
return list;
}
}
执行结果:
执行耗时: