题目描述:

给定一个正整数 n,生成一个包含 1 到 n 所有元素,且元素按顺时针顺序螺旋排列的正方形矩阵。
示例:

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

算法实现:

JavaScript

洋葱遍历法

  1. /**
  2. * @param {number} n
  3. * @return {number[][]}
  4. */
  5. var generateMatrix = function(n) {
  6. var arr = new Array(n)
  7. for (var i = 0; i < arr.length; i++ ) {
  8. arr[i] = new Array(n)
  9. }
  10. for(var s = 0, e = n - 1, m = 1; s <= e ; s++ , e-- ) {
  11. for (var j = s; j <= e; j++ ) arr[s][j] = m++
  12. for (var i = s + 1; i <= e; i++ ) arr[i][e] = m++
  13. for (var j = e - 1; j >= s; j-- ) arr[e][j] = m++
  14. for (var i = e - 1; i >= s + 1; i-- ) arr[i][s] = m++
  15. }
  16. return arr
  17. };

思考:

由于JS中是没有二维数组的定义的,首先需要通过自己创造一个二维数组,之后通过看别人的代码,发现了洋葱遍历法这种方法,通过m++和for循环把这些数字连接起来,并逐个赋值,方法很精妙。

总结:

看了别人的想法之后也深感这种代码自己根本写不出来,路漫漫其修远兮,革命尚未成功,同志仍需努力!