螺旋矩阵 II

Bernie


Bernie
59. 螺旋矩阵 II
思路:
1.选择左闭右开[level, n - level - 1)的区间方式,然后循环遍历,每次遍历都是从左到右,从上到下,从右到左,从下到上,使得每个边的循环次数都保持一致。 2.然后循环次数为 n / 2,如果 n 为奇数,则最后一个元素需要单独处理。
typescript 解法
function generateMatrix(n: number): number[][] {
const ret = new Array(n).fill(0).map(() => new Array(n).fill(0));
const totalLevel: number = Math.floor(n / 2);
let level = 0;
let count = 1;
while (level != totalLevel) {
let length: number = n - level - 1;
for (let i = level; i < length; i++) {
ret[level][i] = count;
count++;
}
for (let j = level; j < length; j++) {
ret[j][length] = count;
count++;
}
for (let k = length; k > level; k--) {
ret[length][k] = count;
count++;
}
for (let l = length; l > level; l--) {
ret[l][level] = count;
count++;
}
level++;
}
if (n % 2 == 1) {
ret[totalLevel][totalLevel] = count;
}
return ret;
}
go 解法
func generateMatrix(n int) [][]int {
// init result
ret := make([][]int, n)
for i := 0; i < n; i ++ {
temp := make([]int, n)
ret[i] = temp
}
level := 0
index := 1
for level != n / 2 {
currentLength := n - 1 - level
for j := level; j < currentLength; j ++ {
ret[level][j] = index
index ++
}
for k := level; k < currentLength; k ++ {
ret[k][currentLength] = index
index ++
}
for l := currentLength; l > level; l -- {
ret[currentLength][l] = index
index ++
}
for o := currentLength; o > level; o -- {
ret[o][level] = index
index ++
}
level ++
}
if n % 2 == 1 {
ret[n/2][n/2] = index
}
return ret
}