59. 螺旋矩阵 II 中等
给你一个正整数 n ,生成一个包含 1 到 n2 所有元素,且元素按顺时针顺序螺旋排列的 n x n 正方形矩阵 matrix 。
示例 1:
输入:n = 3
输出:[[1,2,3],[8,9,4],[7,6,5]]
示例 2:
输入:n = 1
输出:[[1]]
提示:
- 1 <= n <= 20
代码参考:
package main
import "fmt"
func main() {
matrix := generateMatrix(3)
for _, row := range matrix {
for _, num := range row {
fmt.Printf("%d\t", num) // it's ok
}
fmt.Println()
}
}
// 感觉没啥规律可言啊,只能自己绕圈圈走呗
// 注意换方向时当前行索引的自增、自减
func generateMatrix(n int) [][]int {
matrix := make([][]int, n)
for i := range matrix {
matrix[i] = make([]int, n)
}
r, c := 0, 0 // 当前行、当前列
for num := 1; num <= n*n; {
// 从左向右
for c < n && matrix[r][c] == 0 {
matrix[r][c] = num
num++
c++
}
c--
r++
// 从上到下
for r < n && matrix[r][c] == 0 {
matrix[r][c] = num
num++
r++
}
r--
c--
// 从右到左
for c >= 0 && matrix[r][c] == 0 {
matrix[r][c] = num
num++
c--
}
r--
c++
// 从下到上
for r >= 0 && matrix[r][c] == 0 {
matrix[r][c] = num
num++
r--
}
r++
c++
}
return matrix
}
最后编辑: kuteng 文档更新时间: 2021-06-05 10:16 作者:kuteng