对于一个5*4的矩阵,按照→↓←↑的顺序遍历,我们假设起点在(-1,0)(方便统一代码),我们可以发现
→5 ↓3 ←4 ↑2
→3 ↓1 ←2 ↑0停止
由→转成↓,下一次在水平方向上的遍历长度是之前的长度-1,同理可得←转↑也是-1
由↓转←和↑转→也是一样的道理
因此起始水平的遍历长度为5,垂直的遍历长度为3,所以代码中需要rows–
最后达到个数count了就退出循环
class Solution {
public int[] printMatrix(int[][] matrix) {
if(matrix==null || matrix.length==0 || matrix[0].length==0) return new int[0];
int rows=matrix.length,cols=matrix[0].length;
int count=rows*cols,i=0,r=0,c=-1,turns=0;
int[][] directs=new int[][]{{0,1},{1,0},{0,-1},{-1,0}};
int[] res=new int[count];
rows--;
while(count>0){
int len=(turns%2==0)?cols--:rows--;
int[] direct=directs[turns++%4];
while(len-->0){
r+=direct[0];
c+=direct[1];
res[i++]=matrix[r][c];
count--;
}
}
return res;
}
}
if(matrix==null || matrix.length==0 || matrix[0].length==0) return new int[0];
java里我只写了一个martrix==null return null
竟然不对 matrix为null了为啥length还要判断
int[] arr=new int[0];也是一个数组,所以要检查