给定一个包含 m x n 个元素的矩阵(m 行, n 列),请按照顺时针螺旋顺序,返回矩阵中的全部元素。java
示例 1:web
输入:
[
[ 1, 2, 3 ],
[ 4, 5, 6 ],
[ 7, 8, 9 ]
]
输出: [1,2,3,6,9,8,7,4,5]svg
在这道题上花费了很多时间,关于退出的临界条件,把握的不是很好。spa
public List<Integer> spiralOrder(int[][] matrix) { if(matrix==null) return null; int a = -1, b = -1, c = -1, d = 0; int i = 0, j = -1; List<Integer> ans = new LinkedList<>(); if(matrix.length==0 || matrix[0].length==0) return ans; int n = matrix.length; int m = matrix[0].length; int k = m*n; while(k>0){ a++;b++;c++;d++; for( ++j; j<m-a; j++) { ans.add(matrix[i][j]);k--; } if(k==0) break; for(++i,--j ; i<n-b; i++) { ans.add(matrix[i][j]);k--; } if(k==0) break; for( --j,--i; j>=c; j--) { ans.add(matrix[i][j]);k--; } if(k==0) break; for( i--,++j; i>=d; i--) { ans.add(matrix[i][j]);k--; } ++i; } return ans; }