leetcode 54. Spiral Matrix | 54. 螺旋矩阵(Java)
题目
https://leetcode.com/problems/spiral-matrix/
题解
类似于状态机的思路,设定一个 padding,走一圈之后,padding+1 。用 长宽 - padding
确定边界,一旦到达边界,则改变方向。用 count 记录已经走过的格子数量,当走过格子数量=所有格子之后,算法结束。
class Solution {
public List<Integer> spiralOrder(int[][] matrix) {
List<Integer> list = new ArrayList<>();
int count = 0;
int y = matrix.length;
int x = matrix[0].length;
int i = 0;
int j = 0;
int padding = 0;
int direct = 0;// 0=right 1=down 2=left 3=up
while (count < y * x) {
list.add(matrix[i][j]);
count++;
switch (direct) {
case 0 -> {
if (j < x - padding - 1) {
j++;
} else {
direct = 1;
i++;
}
}
case 1 -> {
if (i < y - padding - 1) {
i++;
} else {
direct = 2;
j--;
}
}
case 2 -> {
if (j > padding) {
j--;
} else {
direct = 3;
i--;
}
}
case 3 -> {
if (i > padding + 1) {
i--;
} else {
direct = 0;
padding++;
j++;
}
}
}
}
return list;
}
}
还没有评论,来说两句吧...