输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。
示例 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]
限制:
0 <= matrix.length <= 100
0 <= matrix[i].length <= 100
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/shun-shi-zhen-da-yin-ju-zhen-lcof
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
public int[] spiralOrder(int[][] matrix) {
if(matrix.length==0){return new int[0];}
int[] res = new int[matrix.length*matrix[0].length];
int u = 0,d = matrix.length-1,l = 0,r = matrix[0].length-1;
int idx = 0;
while(true){
for(int i =l;i<=r;i++){
res[idx++] = matrix[u][i];
}
if(++u>d){break;}
for(int i = u;i<=d;i++){
res[idx++] = matrix[i][r];
}
if(--r<l){break;}
for(int i = r;i>=l;i--){
res[idx++] = matrix[d][i];
}
if(--d<u){break;}
for(int i = d;i>=u;i--){
res[idx++] = matrix[i][l];
}
if(++l>r){break;}
}
return res;
}
}
思路:
红色代表第一次便利;黄色第二次;绿色第三次。