Spiral Matrix
程序员文章站
2022-07-12 09:22:30
...
Given a matrix of m x n elements (m rows, n columns), return all elements of the matrix in spiral order.
For example,
Given the following matrix:
[
[ 1, 2, 3 ],
[ 4, 5, 6 ],
[ 7, 8, 9 ]
]
You should return [1,2,3,6,9,8,7,4,5].
如果按照直接的思路去做,估计会有一大堆恶心的if、else来判断边界条件,所以用一个变形的dfs来做,每次标记一个dfs的方向,先按照这个方向去找,如果找到头,再找下一个方向。
比如根据题目要求,向右查找的后继方向应该是向下,像左查找的后继方向应该是向上等等。
public class Solution {
public ArrayList<Integer> spiralOrder(int[][] matrix) {
ArrayList<Integer> result = new ArrayList<Integer>();
if(matrix==null||matrix.length==0||matrix[0].length==0){
return result;
}
boolean [][]flags = new boolean[matrix.length][matrix[0].length];
dfs(matrix,flags,result,0,0,1);
return result;
}
public void dfs(int[][] matrix, boolean [][] flags, ArrayList<Integer> result, int i, int j, int direction){
if(i<0||j<0||i>=matrix.length||j>=matrix[0].length||flags[i][j]){
return;
}
result.add(matrix[i][j]);
flags[i][j] = true;
switch(direction){
case 1://right
dfs(matrix,flags,result,i,j+1,1);
dfs(matrix,flags,result,i+1,j,2);
break;
case 2://down
dfs(matrix,flags,result,i+1,j,2);
dfs(matrix,flags,result,i,j-1,3);
break;
case 3: // left
dfs(matrix,flags,result,i,j-1,3);
dfs(matrix,flags,result,i-1,j,4);
break;
case 4:
dfs(matrix,flags,result,i-1,j,4);
dfs(matrix,flags,result,i,j+1,1);
break;
}
}
}
转载于:https://blog.51cto.com/kcy1860/1336768
上一篇: spiral matrix
下一篇: Spiral Matrix