题目
输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。
输入:matrix = [[1,2,3],[4,5,6],[7,8,9]]
输出:[1,2,3,6,9,8,7,4,5]
思路
定义四个边界,分别表示上下左右,然后轮圈打印,并判断边界,边界越界就结束循环。每打印一层,要记得收缩边界。
代码
public int[] spiralOrder(int[][] matrix) {
//定义四个点
if(matrix.length==0) return new int[0];
int l = 0,r = matrix[0].length-1,t = 0,b = matrix.length-1,x = 0;
int []res = new int [(r+1)*(b+1)];
while(true){
for(int i = l;i<=r;i++) res[x++] = matrix[t][i];//左到右
if(++t>b) break;
for(int i = t;i<=b;i++) res[x++] = matrix[i][r]; //从上到下
if(--r<l) break;
for(int i = r;i>=l;i--) res[x++] = matrix[b][i]; //从右到左
if(t>--b) break;
for(int i = b; i >= t; i--) res[x++] = matrix[i][l]; // bottom to top.
if(++l > r) break;
}
return res;
}