59.螺旋矩阵II
练习次数 **
中等 │ 1295 │ 70.9% 的 619.3K
给你一个正整数 n ,生成一个包含 1 到 n^2 所有元素,且元素按顺时针顺序螺旋排列的 n x n 正方形矩阵 matrix 。
示例 1:
│ 输入:n = 3
│ 输出:[[1,2,3],[8,9,4],[7,6,5]]
示例 2:
│ 输入:n = 1
│ 输出:[[1]]
提示:
* 1 <= n <= 20
题解:
// @leet start
func generateMatrix(n int) [][]int {
ret := make([][]int, n)
for i:= range ret {
ret[i] = make([]int, n)
}
startx, starty := 0, 0
loop, mid := n/2, n/2
count := 1
offset := 1
var i int
var j int
for loop > 0 {
i = startx;
j = starty;
for j = starty; j<n-offset; j++ {
ret[startx][j] = count
count++
}
for i = startx; i<n-offset; i++ {
ret[i][j] = count
count++
}
for j=j; j > starty; j-- {
ret[i][j] = count
count++
}
for i=i; i > startx; i-- {
ret[i][j] = count
count++
}
startx++
starty++
offset++
loop--
}
if n%2 != 0 {
ret[mid][mid] = count
}
return ret
}
// @leet end
另一个版本
func generateMatrix(n int) [][]int {
// init rectangle
digit := 1
rectangle := make([][]int, n)
for i := range rectangle {
rectangle[i] = make([]int, n)
}
left, top, right, bottom := 0, 0, n-1, n-1
for digit <= n*n {
for i:= left; i<=right; i++ {
rectangle[top][i] = digit
digit++
}
top++
for i:=top; i<= bottom; i++ {
rectangle[i][right] = digit
digit++
}
right--
for i:=right; i>=left; i-- {
rectangle[bottom][i] = digit
digit++
}
bottom--
for i:=bottom; i>= top; i-- {
rectangle[i][left] = digit
digit++
}
left++
}
return rectangle
}