1 题目
输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。
示例 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
注意:本题与主站 54 题相同:https://leetcode-cn.com/problems/spiral-matrix/
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/shun-shi-zhen-da-yin-ju-zhen-lcof
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
2 Java
2.1 方法一(二维数组遍历,思维)
class Solution {
public int[] spiralOrder(int[][] matrix) {
if(matrix.length == 0 || matrix[0].length == 0) return new int[0];
int[] arr = new int[matrix.length * matrix[0].length];
int u = 0, d = matrix.length - 1, l = 0, r = matrix[0].length - 1;
// 一个while遍历一个圈,不断缩小直至结束
int index = 0;
while(u <= d && l <= r){
// 向右
for(int j = l; j <= r; j++) arr[index++] = matrix[u][j];
if(index == arr.length) break;
u++;
// 向下
for(int i = u; i <= d; i++) arr[index++] = matrix[i][r];
if(index == arr.length) break;
r--;
// 向左
for(int j = r; j >= l; j--) arr[index++] = matrix[d][j];
if(index == arr.length) break;
d--;
// 向上
for(int i = d; i >= u; i--) arr[index++] = matrix[i][l];
if(index == arr.length) break;
l++;
}
return arr;
}
}