算法_数组_螺旋矩阵

螺旋矩阵

leetcode题目链接

1.循环不变量原则

类似于二分法,我们要坚持循环时只是用一个原则,要么是左闭右开,要么是左开右闭,要么是左闭右闭。在循环过程中不能总变化,这样会导致漏判或者重复判断等问题。

2.解法

填充上行从左到右(左闭右开)
填充右列从上到下(左闭右开)
填充下行从右到左(左闭右开)
填充左列从下到上(左闭右开)

最后加一次判断,看n是否为奇数,如果是奇数那么就要在填充一次最中间的位置;如果为偶数,就不需要了。
在这里插入图片描述
代码如下:

def generateMatrix(n):
    matrix = [[0]*n for _ in range(n)] # 初始化矩阵
    left, right, up, down = 0, n-1, 0, n-1 # 控制循环边界
    number = 1 # 填充的数字

    while left<right and up<down: # 控制边界
        # 上面从左到右填充(左闭右开)
        for x in range(left,right):
            matrix[up][x] = number
            number += 1

        # 右边从上到下填充(左闭右开)
        for x in range(up,down):
            matrix[x][right] = number
            number += 1

        # 下面从右到左填充(左闭右开)
        for x in range(right,left,-1):
            matrix[down][x] = number
            number += 1

        # 左边从下到上填充(左闭右开)
        for x in range(down,up,-1):
            matrix[x][left] = number
            number += 1

        # 缩小范围
        left += 1
        right -= 1
        up += 1
        down -= 1

    # 如果n为奇数,额外填充一次中心
    if n % 2 != 0:
        matrix[n//2][n//2] = number

    return matrix

3.总结

python

  1. for _ in range(n):其中的_起到的是一个循环标志的作用,也可以用i,j等代替,因为在代码中不需要用到i,j等,所以就直接写成_即可

  2. 初始化n*n矩阵的方法:

     matrix = [[0]*n for _ in range(n)]
    

算法

  1. 循环不变量原则

4.相关题目推荐

剑指Offer 29.顺时针打印矩阵

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值