输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。
顺时针:按照从左到右,从上到下,从右到左,从下到上的顺序
初始化左右上下边界:
int top=0,left=0,bottom=matrix.length-1,right=matrix[0].length-1
先从左到右:代码
for(int i=left;i<=right;i++){
result[num]=matrix[top][i];
num++;
}
到达右边缘时,先判断可不可以向下拐,同时将top+1上边界+1
if(++top >bottom) break;
同理,向左向右向下都是一样的
所有代码:
class Solution {
public int[] spiralOrder(int[][] matrix) {
if(matrix.length==0){
return new int[0];
}
int n=matrix.length*matrix[0].length;
int top=0,left=0,bottom=matrix.length-1,right=matrix[0].length-1,num=0;
int[] result=new int[n];
while(true){
for(int i=left;i<=right;i++){
result[num]=matrix[top][i];
num++;
}
if(++top >bottom) break;
for(int i=top;i<=bottom;i++){
result[num]=matrix[i][right];
num++;
}
if(left> --right) break;
for(int i=right;i>=left;i--){
result[num]=matrix[bottom][i];
num++;
}
if(top > --bottom) break;
for(int i=bottom;i>=top;i--){
result[num]=matrix[i][left];
num++;
}
if(++left >right) break;
}
return result;
}
}