輸入一個矩陣,按照從外向裏以順時針的順序依次打印出每一個數字。
示例 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
思路:看代碼
class Solution {
public int[] spiralOrder(int[][] matrix) {
if (matrix.length == 0) {
return new int[0];
}
int[] res = new int[matrix.length * matrix[0].length];
int up = 0;
int down = matrix.length-1;
int l = 0;
int r = matrix[0].length-1;
int index = 0;
while (true) {
for (int i = l; i <= r; i++) {//向右
res[index++] = matrix[up][i];
}
if (++up > down) {//up層走完了,所以up+1(也有爲接下來的for做準備),加入up大於down了,就說明遍歷完成了
break;
}
for (int i = up; i <= down; i++) {//往下走
res[index++] = matrix[i][r];
}
if (--r < l) {
break;
}
for (int i = r; i >= l; i--) {//往左走
res[index++] = matrix[down][i];
}
if (--down < up) {
break;
}
for (int i = down; i >= up; i--) {//往上走
res[index++] = matrix[i][l];
}
if (++l > r) {
break;
}
}
return res;
}
}