今天的题是我在操作系统上想的,回来实验的,之前c的时候我应该写过这题,我以前没觉得这么复杂啊
54. 螺旋矩阵
题目:


题解:
java
class Solution {
public List<Integer> spiralOrder(int[][] matrix) {
// 右边界
int r_x = matrix[0].length-1;
int r_y = matrix.length-1;
// 左边界
int l_x = 0;
int l_y = 0;
//坐标
int x = 0;
int y = 0;
List<Integer> s = new ArrayList<>();
int flag=0; //0表示向右走,1表示向下走,2表示向左走,3表示向上走
while(s.size() < matrix[0].length*matrix.length) {
//向右移
if(flag%4==0) {
while(x<=r_x) {
//在数组中,上下是x,左右是y
s.add(matrix[y][x]);
x++;
}
x--;
y++;
r_x--;
}
else if(flag%4==1) {
while(y<=r_y) {
s.add(matrix[y][x]);
y++;
}
y--;
x--;
r_y--;
}
else if(flag%4==2) {
while(x>=l_x) {
s.add(matrix[y][x]);
x--;
}
x++;
y--;
l_x++;
}
else if(flag%4==3) {
//这里不能和一圈的起始点重合,所以进行更改
while(y>l_y) {
s.add(matrix[y][x]);
y--;
}
y++;
x++;
l_y++;
}
flag++;
}
return s;
}
}