题目要求:按照特定顺序将二维数组的元素存储至list中(顺时针遍历)
思想:由外至内的顺时针遍历,可设置四个边界值,存储当前该遍历的圈的界限,在一个死循环中执行四个方向的一维数组遍历操作,当无数组可遍历时跳出循环。
tips:
获取二维数组行与列的方法(注意矩阵为空的情况,此时直接获取列会出错,因为没有matrix[0])
代码如下:
class Solution {
public List<Integer> spiralOrder(int[][] matrix) {
List<Integer> ord = new ArrayList<Integer>();
int row = matrix.length;
if(row==0) return ord;
int col = matrix[0].length;
int l=0,r=col-1,u=0,d=row-1;
while(true){
for(int i=l;i<=r;i++) ord.add(matrix[u][i]);
if(++u>d) break;
for(int i=u;i<=d;i++) ord.add(matrix[i][r]);
if(--r<l) break;
for(int i=r;i>=l;i--) ord.add(matrix[d][i]);
if(--d<u) break;
for(int i=d;i>=u;i--) ord.add(matrix[i][l]);
if(++l>r) break;
}
return ord;
}
}