剑指 Offer 29. 顺时针打印矩阵
题目描述:
题解分析:
- 题目的初衷是将这道题当做一个简单题处理
- 这道题一开始想的太复杂了,其实可以参考迷宫广度优先搜索的过程,只不过在选定一个方向遍历时,除非遇到改变方向的情况,否则一直走下去。
- 需要注意的是:这里的方向二维数组(direction),它里面四个方向需要满足顺时针的顺序。
class Solution {
public int[] spiralOrder(int[][] matrix) {
if (matrix == null || matrix.length == 0)
return new int[0];;
int n = matrix.length;
int m = matrix[0].length;
int total = n * m;
int[] result = new int[total];
boolean [][]isTravel = new boolean[n][m];
//顺时针的旋转方向
int [][]direction = {{0, 1}, {1, 0}, {0, -1}, {-1, 0}};
int currentDir = 0;
int currenti=0,currentj=0;
for(int i=0; i<total; i++){
result[i] = matrix[currenti][currentj];
isTravel[currenti][currentj] = true;
int tempi = currenti + direction[currentDir][0];
int tempj = currentj + direction[currentDir][1];
//改变遍历的方向
if(tempi <0 || tempi >= n || tempj <0 || tempj >=m || isTravel[tempi][tempj]){
currentDir = (currentDir +1) % 4;
}
currenti += direction[currentDir][0];
currentj += direction[currentDir][1];
}
return result;
}
}