题目描述:
给定一个正整数 n,生成一个包含 1 到 n 所有元素,且元素按顺时针顺序螺旋排列的正方形矩阵。
示例:
输入: 3
输出:
[
[ 1, 2, 3 ],
[ 8, 9, 4 ],
[ 7, 6, 5 ]
]
算法实现:
JavaScript
洋葱遍历法
/**
* @param {number} n
* @return {number[][]}
*/
var generateMatrix = function(n) {
var arr = new Array(n)
for (var i = 0; i < arr.length; i++ ) {
arr[i] = new Array(n)
}
for(var s = 0, e = n - 1, m = 1; s <= e ; s++ , e-- ) {
for (var j = s; j <= e; j++ ) arr[s][j] = m++
for (var i = s + 1; i <= e; i++ ) arr[i][e] = m++
for (var j = e - 1; j >= s; j-- ) arr[e][j] = m++
for (var i = e - 1; i >= s + 1; i-- ) arr[i][s] = m++
}
return arr
};
思考:
由于JS中是没有二维数组的定义的,首先需要通过自己创造一个二维数组,之后通过看别人的代码,发现了洋葱遍历法这种方法,通过m++和for循环把这些数字连接起来,并逐个赋值,方法很精妙。
总结:
看了别人的想法之后也深感这种代码自己根本写不出来,路漫漫其修远兮,革命尚未成功,同志仍需努力!