59. 螺旋矩阵II¶
题目¶
给你一个正整数 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\)
题解¶
Go
func generateMatrix(n int) [][]int {
matrix := make([][]int, n)
for i := range matrix {
matrix[i] = make([]int, n)
}
num := 1
left, right, top, bottom := 0, n-1, 0, n-1 // 4 boundaries of the matrix
for num <= n*n { // Until num > n * n, end the traversal.
for i := left; i <= right; i++ { // top layer
matrix[top][i] = num
num++
}
top++ // move to next layer
for i := top; i <= bottom; i++ { // right layer
matrix[i][right] = num
num++
}
right--
for i := right; i >= left; i-- { // bottom layer
matrix[bottom][i] = num
num++
}
bottom--
for i := bottom; i >= top; i-- { // left layer
matrix[i][left] = num
num++
}
left++
}
return matrix
}
Python
class Solution:
def generateMatrix(self, n: int) -> [[int]]:
l, r, t, b = 0, n - 1, 0, n - 1
matrix = [[0 for _ in range(n)] for _ in range(n)]
num, tar = 1, n * n
while num <= tar:
for i in range(l, r + 1): # left to right
matrix[t][i] = num
num += 1
t += 1
for i in range(t, b + 1): # top to bottom
matrix[i][r] = num
num += 1
r -= 1
for i in range(r, l - 1, -1): # right to left
matrix[b][i] = num
num += 1
b -= 1
for i in range(b, t - 1, -1): # bottom to top
matrix[i][l] = num
num += 1
l += 1
return matrix
复杂度¶
- 时间复杂度:\(O(n^2)\)
- 空间复杂度:\(O(1)\)