题目描述:

给定一个包含 m x n 个元素的矩阵(m 行, n 列),请按照顺时针螺旋顺序,返回矩阵中的所有元素。
示例 1:
**

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

示例 2:

  1. 输入:
  2. [
  3. [1, 2, 3, 4],
  4. [5, 6, 7, 8],
  5. [9,10,11,12]
  6. ]
  7. 输出: [1,2,3,4,8,12,11,10,9,5,6,7]

算法实现:

  1. /**
  2. * @param {number[][]} matrix
  3. * @return {number[]}
  4. */
  5. var spiralOrder = function (matrix) {
  6. var r = []
  7. var opr = (arr) => {
  8. var begin = []
  9. for (var i = 0; i < arr.length; i++ ) {
  10. if (i === 0) {
  11. r = r.concat(arr[i])
  12. } else if (i == l - 1) {
  13. r = r.concat(arr[i].reverse())
  14. } else {
  15. r.push(arr[i].pop())
  16. var ele = arr[i][0]
  17. if (ele != undefined) {
  18. begin.push(arr[i].shift())
  19. }
  20. }
  21. }
  22. arr.shift()
  23. arr.pop()
  24. r = r.concat(begin.reverse())
  25. if (arr[0] && arr[0][0]) {
  26. return map(arr, r)
  27. } else {
  28. return r
  29. }
  30. }
  31. var result = opr(matrix)
  32. return result
  33. };

思路:

运用递归法求解。

总结:

自己写的代码调bug调了很长时间,和这个代码的大致思路一样,但是总会出现bug,看了别人的代码发现有许多地方经过改进之后就可以很好的避免这些bug,继续努力。