leetcode链接:https://leetcode-cn.com/problems/shun-shi-zhen-da-yin-ju-zhen-lcof/
输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。
示例 1:
输入:matrix = [[1,2,3],[4,5,6],[7,8,9]]
输出:[1,2,3,6,9,8,7,4,5]示例 2:
输入: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]
解题思路:定义一个数组来存储打印后的结果,设置四个变量,分别表示左边界、右边界、上边界和下边界,首先从左边界开始,打印到右边界,然后将上边界加一,当其不大于下边界时,继续顺时针打印, 从上边界打印到下边界,然后将右边界减一,当其不小于左边界时,继续顺时针打印,从下边界打印到上边界,然后将左边界加一,当其不大于右边界时,从左边界打印到右边界,直到不符合循环条件发生越界停止。
class Solution {
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;
int[] result = new int[(b+1)*(r+1)];
int index=0;
while(true){
for(int i=l;i<=r;i++){
result[index++]=matrix[t][i];
}
if(++t>b) break;
for(int i=t;i<=b;i++){
result[index++]=matrix[i][r];
}
if(--r<l) break;
for(int i=r;i>=l;i--){
result[index++]=matrix[b][i];
}
if(--b<t) break;
for(int i=b;i>=t;i--){
result[index++]=matrix[i][l];
}
if(++l>r) break;
}
return result;
}
}