输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。
示例 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
思路:
按右下左上的顺序遍历。
将已经走过的地方置101,然后拐弯的时候判断一下是不是已经走过了,如果走过了就计算一下新的方向。
class Solution {
public int[] spiralOrder(int[][] matrix) {
if(matrix.length == 0 || matrix[0].length == 0) return new int[0];
int direction = 0;//0代表右,1代表下,2代表左,3代表上
int m = matrix.length;
int n = matrix[0].length;
int i=0;
int j=0;
int anw[] = new int[m * n];
for(int sum = 0; sum < m * n; sum++){
anw[sum] = matrix[i][j];
matrix[i][j] = 101;
if(direction == 0 && (j == n - 1 || matrix[i][j + 1] == 101))direction = 1;
else if(direction == 1 && (i == m - 1 || matrix[i + 1][j] == 101))direction = 2;
else if(direction == 2 && (j == 0 || matrix[i][j - 1] == 101))direction = 3;
else if(direction == 3 && matrix[i - 1][j] == 101)direction = 0;
if(direction == 0)j++;
else if(direction == 1)i++;
else if(direction == 2)j--;
else if(direction == 3)i--;
}
return anw;
}
}