1、题目描述
2、算法分析
?首先设定矩阵的上下左右的边界。
每遍历一行或者一列,删除这一行或者这一列。
如果左右边界,或者上下边界越界,说明是最后一列或者最后一行。
3、代码实现
class Solution {
public List<Integer> spiralOrder(int[][] matrix) {
List<Integer> res = new ArrayList<>();
int up = 0;
int down = matrix.length - 1;
int left = 0;
int right = matrix[0].length - 1;
// 一行一列遍历,当行行重合的时候、列列重合的时候break结束
while(true){
// 最上面一行
for(int col = left;col <= right;col++){
res.add(matrix[up][col]);
}
// 如果上下行重叠,结束
if(++up >= down){
break;
}
for(int row = up;row <=down;row++){
res.add(matrix[right][row]);
}
if(--right <= left){
break;
}
for(int col = right;col >= left;col--){
res.add(matrix[down][right]);
}
if(--down >= up){
break;
}
for(int row = down;row >= up;row--){
res.add(matrix[down][row]);
}
if(++left >= right){
break;
}
}
return res;
}
}
|