跳转至

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)\)