给你一个 mn 列的矩阵 matrix ,请按照 顺时针螺旋顺序 ,返回矩阵中的所有元素。

示例一
image.png

  1. 输入:matrix = [[1,2,3],[4,5,6],[7,8,9]]
  2. 输出:[1,2,3,6,9,8,7,4,5]

实例二
image.png

  1. 输入:matrix = [[1,2,3,4],[5,6,7,8],[9,10,11,12]]
  2. 输出:[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

题解

此题和59一样,模拟就行了,没啥难的。注意边界的判断!

Python懒得写了,有空写吧

JavaScript

  1. /**
  2. * @param {number[][]} matrix
  3. * @return {number[]}
  4. */
  5. var spiralOrder = function(matrix) {
  6. ans = []
  7. let top = 0
  8. let left = 0
  9. let right = matrix[0].length-1
  10. let bottom = matrix.length-1
  11. let num = 1
  12. let target = matrix[0].length*matrix.length
  13. while(num<=target){
  14. for(let i=left;i<right+1;i++){
  15. if(num>target) continue
  16. ans.push(matrix[top][i])
  17. num++
  18. }
  19. top++
  20. for(let i=top;i<bottom+1;i++){
  21. if(num>target) continue
  22. ans.push(matrix[i][right])
  23. num++
  24. }
  25. right--
  26. for(let i=right;i>left-1;i--){
  27. if(num>target) continue
  28. ans.push(matrix[bottom][i])
  29. num++
  30. }
  31. bottom--
  32. for(let i=bottom;i>top-1;i--){
  33. if(num>target) continue
  34. ans.push(matrix[i][left])
  35. num++
  36. }
  37. left++
  38. }
  39. return ans
  40. };
  41. let m = [[1,2,3],[4,5,6],[7,8,9]]
  42. let matrix = [[1,2,3,4],[5,6,7,8],[9,10,11,12]]
  43. console.log(spiralOrder(matrix))