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
解题分析及思路:
方法一:模拟
此题与54. 螺旋矩阵类似,只不过是生成一个螺旋矩阵。
与之前的题目类似,我们需要遍历整个矩阵,遍历结束的条件是遍历的元素个数等于矩阵的元素个数。
随后以同样的方式,使用一个二维数组 direction
来表示方向,每次遍历时,根据当前位置是否超出边界或者到达之前遍历的位置,来更换方向。
由于解法类似,这里不再赘述。
var direction = [][]int{
{0, 1},
{1, 0},
{0, -1},
{-1, 0},
}
func generateMatrix(n int) [][]int {
var count = 0
var result = make([][]int, n)
for i := 0; i < n; i++ {
result[i] = make([]int, n)
}
var directionCount = 1
var index = 0
var row, col = 0, 0
for count < n*n {
result[row][col] = count + 1
count++
if row+direction[index][0]+direction[index][0]*directionCount/4 < 0 || row+direction[index][0]+direction[index][0]*directionCount/4 >= n ||
col+direction[index][1]+direction[index][1]*directionCount/4 < 0 || col+direction[index][1]+direction[index][1]*directionCount/4 >= n {
index = (index + 1) % 4
directionCount++
}
row += direction[index][0]
col += direction[index][1]
}
return result
}
复杂度:
- 时间复杂度:O(N2)
- 空间复杂度:O(1)
执行结果:
- 执行耗时:1 ms,击败了29.01% 的Go用户
- 内存消耗:2.2 MB,击败了15.94% 的Go用户