题目链接:
题目描述:
思路:
如果某行、列已经读取过,就把这行、列从矩阵中删除,这里的删除可以通过重新设立矩阵的边界完成
边界有4个,首行、末行,首列、尾列,
- 读完第一行,首行+1,
- 读完最后一列,尾列-1,
- 读完最后一行,末行-1,
- 读完第一列,首列+1,
一直进行循环,直到 首行>末行,首列>尾列,
规定每次读取,都要把这行、列读完
实现代码:
class Solution {
public List<Integer> spiralOrder(int[][] matrix) {
int left = 0, right = matrix[0].length - 1, up = 0, dowm = matrix.length - 1;
List<Integer> ans = new ArrayList<>();
while(true){
for(int i = left; i <= right; i++){
ans.add(matrix[up][i]);
}
if(++up > dowm) break;
for(int i = up; i <= dowm ; i++){
ans.add(matrix[i][right]);
}
if(--right < left) break;
for(int i = right; i >= left; i--){
ans.add(matrix[dowm][i]);
}
if(--dowm < up) break;
for(int i = dowm; i >= up; i--){
ans.add(matrix[i][left]);
}
if(++left > right)break;
}
return ans;
}
}