DESC:
给你一个
m
行n
列的矩阵matrix
,请按照 顺时针螺旋顺序 ,返回矩阵中的所有元素。示例 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]提示:
m == matrix.length
n == matrix[i].length
1 <= m, n <= 10
-100 <= matrix[i][j] <= 100
CODE:
class Solution { public List<Integer> spiralOrder(int[][] matrix) { if (matrix == null || matrix.length==0) { return new ArrayList<Integer>(0); } int m = matrix.length, n=matrix[0].length; List<Integer> res = new ArrayList<>(m*n); int rowS=0, rowE=m-1, colS=0, colE=n-1; while (rowS<=rowE && colS<=colE) { for (int i=colS; i<=colE; i++) { res.add(matrix[rowS][i]); } rowS++; if (rowS>rowE) { break; } for (int i=rowS; i<=rowE; i++) { res.add(matrix[i][colE]); } colE--; if (colE<colS) { break; } for (int i=colE; i>=colS; i--) { res.add(matrix[rowE][i]); } rowE--; if (rowE<rowS) { break; } for (int i=rowE; i>=rowS; i--) { res.add(matrix[i][colS]); } colS++; } return res; } }
NOTES:
- 按题意路径遍历即可,注意临界条件及方向(递增还是递减)