输入:matrix = [[1,2,3],[4,5,6],[7,8,9]] 输出:[1,2,3,6,9,8,7,4,5]


输入:matrix = [[1,2,3,4],[5,6,7,8],[9,10,11,12]] 输出:[1,2,3,4,8,12,11,10,9,5,6,7]


解法:

简单分为四个循环 ,把他放在大循环中   ,        左到右   上到下  右到左  下到上   .....左到右  上到下......下到上.....  

再循环后 使t++(l++ r--  b--)  这样就可以满足i<=b....  里面的等于了

 

class Solution {
public int[] spiralOrder(int[][] matrix) {
if(matrix==null||matrix.length==0){
return new int[0];
}
int l =0,r=matrix[0].length-1,t=0,b=matrix.length-1;
int total=(r+1)*(b+1);
int [] res=new int[total];
int flag=0;
while(true){

//从左到右
for(int i=l;i<=r&&flag<total;i++){
res[flag]=matrix[t][i];
flag++;
}
if(t++>b)break;
//从上到下
for(int i=t;i<=b&&flag<total;i++){
res[flag]=matrix[i][r];
flag++;

}
if(r--<l)break;
//从右到左
for(int i=r;i>=l&&flag<total;i--){
res[flag]=matrix[b][i];
flag++;
}
if(b--<t)break;
//从下到上
for(int i=b;i>=t&&flag<total;i--){
res[flag]=matrix[i][l];
flag++;
}
if(l++>r)break;
}
return res;

}
}