题目

image.png

思路

  • 对于这种螺旋遍历的方法,重要的是要确定上下左右四条边的位置,那么初始化的时候,上边up就是0,下边down就是m-1,左边left是0,右边right是n-1。然后我们进行while循环,先遍历上边,将所有元素加入结果res,然后上边下移一位,如果此时上边大于下边,说明此时已经遍历完成了,直接break。

    代码

    1. public List<Integer> spiralOrder(int[][] matrix) {
    2. int m = matrix.length, n = matrix[0].length;
    3. List<Integer> res = new ArrayList<>();
    4. if(m == 0 || n == 0) return res;
    5. int up = 0, down = m - 1, left = 0, right = n - 1;
    6. while (res.size() < m * n) {
    7. for (int i = left; i <= right; i++) res.add(matrix[up][i]);
    8. if (++up > down) break;
    9. for (int i = up; i <= down; i++) res.add(matrix[i][right]);
    10. if (--right < left) break;
    11. for (int i = right; i >= left; i--) res.add(matrix[down][i]);
    12. if (--down < up) break;
    13. for (int i = down; i >= up; i--) res.add(matrix[i][left]);
    14. if (++left > right) break;
    15. }
    16. return res;
    17. }
    螺旋矩阵