59.螺旋矩阵
给你一个正整数 n ,生成一个包含 1 到 n2 所有元素,且元素按顺时针顺序螺旋排列的 n x n 正方形矩阵 matrix 。
解决思路:
这题我是参考一篇文章,博主写的是真的很棒
文章链接
文章内用的是C++的写法,这里我用JS代码呈现一下:
var generateMatrix = function(n) {
var arr = new Array()
// 初始化二维数组
for (let i = 0; i < n; i++) {
arr[i] = new Array()
for (let j = 0; j < n; j++) {
arr[i][j] = 0
}
}
var loop = Math.floor(n / 2) // 定义需要循环多少圈,n = 3时,循环1圈,中间的值单独处理
var mid = Math.floor(n / 2) // 矩阵的中间的位置,n = 3时,即为(1,1)
var offset = 1 // 每一圈循环,需要控制遍历的长度
var startx = 0 // 起始x坐标
var starty = 0 // 起始y坐标
var count = 1 // 用来表示数组每个位置的元素
var m = 0
var k = 0
while (loop--) {
// 下面的四个for循环即为遍历一圈
// 模拟从左到右遍历
for (k = starty; k < starty + n - offset; k++) {
arr[startx][k] = count++
}
// 模拟从上到下遍历
for (m = startx; m < startx + n - offset; m++) {
arr[m][k] = count++
}
// 模拟低层从右到左遍历
for (; k > starty; k--) {
arr[m][k] = count++
}
// 模拟从下到上遍历
for (; m > startx; m--) {
arr[m][starty] = count++
}
startx++
starty++
offset += 2
}
if (n % 2 !== 0) {
arr[mid][mid] = count
}
return arr
};