【代码幻想录算法研读】59. 螺旋矩阵 II

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

这题目的做法是对二维数组的考核

而求解本题依然是要坚持循环不变量原则。

模拟顺时针画矩阵的过程:

  • 填充上行从左到右
  • 填充右列从上到下
  • 填充下行从右到左
  • 填充左列从下到上

由外向内一圈一圈这么画下去。

顺时针画则是

螺旋矩阵

[0][0] [0][1] [0][2]

[1][0] [1][1] [1][2]

[2][0] [2][1] [2][2]

 从左到右 [0][0] -> [0][1] -> [0][2] ,可以看到top是不变的,i=left  i<=right i++循环 

则matrix[top][i]=num num++. 循环结束 top++。

从上到下 [0][2]-> [1][2] -> [2][2] ,可以看到right是不变的 i=top i<=bottom i++ 循环

则matrix[i][right]=num num++ 循环结束 right--

从右到左 [2][2] -> [2][1] ->[2][0]  可以看到bottom是不变的 i=right i>=lef i--  

则matrix[bottom][i]=num num++ 循环结束 bottom--

从下到上[2][0]->[1][0]->[0][0]  left是不变的 i=bottom i>=top i-- 循环

matrix[i][left]=num num++ 循环结束 left++

顺时针结束

func generateMatrix(n int) [][]int {
    top, bottom := 0, n-1
    left, right := 0, n-1
    num := 1
    tar := n * n
    matrix := make([][]int, n)
    for i := 0; i < n; i++ {
        matrix[i] = make([]int, n)
    }
    for num <= tar {
        for i := left; i <= right; i++ {
            matrix[top][i] = num
            num++
        }
        top++
        for i := top; i <= bottom; i++ {
            matrix[i][right] = num
            num++
        }
        right--
        for i := right; i >= left; i-- {
            matrix[bottom][i] = num
            num++
        }
        bottom--
        for i := bottom; i >= top; i-- {
            matrix[i][left] = num
            num++
        }
        left++
    }
    return matrix
}

此题要搞清楚二维数组

  • 填充上行从左到右
  • 填充右列从上到下
  • 填充下行从右到左
  • 填充左列从下到上  

每个参数的边界值。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值