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