题目

输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。

示例 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]

限制:

0 <= matrix.length <= 100
0 <= matrix[i].length <= 100

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/shun-shi-zhen-da-yin-ju-zhen-lcof
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

题解

1.设定边界

  1. /**
  2. * @param {number[][]} matrix
  3. * @return {number[]}
  4. */
  5. var spiralOrder = function (matrix) {
  6. const row = matrix.length
  7. if (row === 0) return []
  8. const col = matrix[0].length
  9. if (col === 0) return []
  10. const res = []
  11. let l = 0, r = col - 1, u = 0, d = row - 1
  12. while (res.length < (row * col)) {
  13. for (let i = l; i <= r; i++) {
  14. res.push(matrix[u][i])
  15. }
  16. u++
  17. if (u > d) break
  18. for (let i = u; i <= d; i++) {
  19. res.push(matrix[i][r])
  20. }
  21. r--
  22. if (r < l) break
  23. for (let i = r; i >= l; i--) {
  24. res.push(matrix[d][i])
  25. }
  26. d--
  27. if (d < u) break
  28. for (let i = d; i >= u; i--) {
  29. res.push(matrix[i][l])
  30. }
  31. l++
  32. if (l > r) break
  33. }
  34. return res
  35. };