螺旋矩阵
给你一个 m 行 n 列的矩阵 matrix ,请按照 顺时针螺旋顺序 ,返回矩阵中的所有元素。
class Solution {
public List<Integer> spiralOrder(int[][] matrix) {
List<Integer> res = new ArrayList <>();
//int[] array = new array[2]; 定义一个长度为2的数组,此时如果数组没有被初始化,默认的值为null;所以判断不仅为null还需要判断数组的长度是否为0.
if(matrix==null || matrix.length ==0 || matrix[0].length==0){
return res;
}
//二维数组的长度要注意!!!
int m= matrix.length; //行
int n=matrix[0].length;//列
//定义四个边界
int top =0, bottom=m-1,left=0,right=n-1;
while(top<=bottom && left<=right){
//按照右下左上的顺序一直走
for(int i =left; i <= right; i++){
res.add(matrix[top][i]);
}
for(int i =top+1 ; i<=bottom;i++){
res.add(matrix[i][right]);
}
//!!!首先右下一定没走过的,左上就不一定。如果走到最后出现了一行一列的情况,必须加判断,否则会重复。因为这个时候只需要走一边右下就可以了,不需要走左上了。
if (left < right && top < bottom) {
for(int i =right-1 ; i >=left+1;i--){
res.add(matrix[bottom][i]);
}
for(int i =bottom ; i>=top+1;i--){
res.add(matrix[i][left]);
}
}
top++;
bottom--;
left++;
right--;
}
return res;
}
}
注意坐标原点在左上角!!!