59. 螺旋矩阵 II

leecode原题

题目

给你一个正整数 n ,生成一个包含 1n2 所有元素,且元素按顺时针顺序螺旋排列的 n x n 正方形矩阵 matrix

示例

示例 1:

example

输入:n = 3
输出:[[1,2,3],[8,9,4],[7,6,5]]

示例 2:

输入:n = 1
输出:[[1]]

提示:

  • 1 <= n <= 20

解题思路

思路

example 这个题直观上来看, 我们顺时针一圈(即从左到右、从上到下、从右到左、从下到上)即产生了一个顺时的矩阵外圈,然后该矩阵外圈的下一内圈也是按照同样的顺序即可产生。我们重点要注意的是: 比如从左到右完成,需要将上加一,这样从上到下的时候,不会重复产生那个顶点元素,其他方向规律是一样的。

实现

源码

func generateMatrix(n int) [][]int {
    var (
        spiral_matrix              = make([][]int, n) //螺旋矩阵
        spiral_matrix_elements_sum = n * n            // 螺旋矩阵元素总数

        left   = 0     // 左边起始位置
        right  = n - 1 // 右边起始位置
        top    = 0     // 上边起始位置
        bottom = n - 1 //下边起始位置

        current_num = 1 // 螺旋矩阵当前记录的元素(初始从1开始)
    )
    for i := 0; i < n; i++ {
        spiral_matrix[i] = make([]int, n)
    }

    for current_num <= spiral_matrix_elements_sum {
        // 从左到右
        for i := left; i <= right; i++ {
            spiral_matrix[top][i] = current_num
            current_num++
        }
        top++

        // 从上到下
        for i := top; i <= bottom; i++ {
            spiral_matrix[i][right] = current_num
            current_num++
        }
        right--

        // 从右到左
        for i := right; i >= left; i-- {
            spiral_matrix[bottom][i] = current_num
            current_num++
        }
        bottom--

        // 从下到上
        for i := bottom; i >= top; i-- {
            spiral_matrix[i][left] = current_num
            current_num++
        }
        left++
    }
    return spiral_matrix
}
Copyright © ROSEMARY666 2022 all right reserved,powered by Gitbook该文章修订时间: 2022-09-28 15:55:21

results matching ""

    No results matching ""