LeetCode 59:螺旋矩阵Ⅱ python(边界收缩)

LeetCode 59:螺旋矩阵Ⅱ python(边界收缩)

这个题目真的是把自己卡死,中间尝试了好多方法都不完美,看了很多大神的讲解,也迷迷糊糊,终于啃了两天之后,彻彻底底搞明白了!!

一、题目

题目传送门 — https://leetcode-cn.com/problems/spiral-matrix-ii/
在这里插入图片描述

二、解析

这个题目有点绕,从定义变量,定义二维列表,到一圈一圈向内旋转填充数字,再到最后的边界确定每一步都在卡我,脑子要没掉!!

1.二维的列表

定义二维列表:matrix = [[0 for _ in range(n)] for _ in range(n)]

2.四个边围成一圈

每个边的情况如下

①从左往右➡:行不变,列增加

②从上到下⬇:列不变,行增加

③从右往左⬅:行不变,列减小

④从下往上⬆:列不变,行减小

确定这个规律之后,4个循环可以搞定

3.确定循环边界

循环内设置一个变量 i 的值来代表变化的那个下标,循环结束之后不变的那个下标向内收缩 1

确定每个for循环的边界:定义4个变量来控制上下左右四个边界,分别时top,bottom,left,right

第一个循环从左往右➡,上边行用top,列增加:列范围就是从左到右[left,right],转换成pytho语言就是for i in range(left,right+1,1),这里right+1是因为range的范围是左闭右开,所以+1之后才可以完整的到最右边。最后的1即每次循环,i+1。在本次循环结束之后,top+1,即上方一条边循环结束上边界向下收缩1。

#从左往右,行不变,列增加
for i in range(left,right+1):
    matrix[top][i] = num
    num += 1
top += 1

第二个循环从上到下⬇,到右边了列用right,行增加:行范围就是从上到下[top,bottom],转换成pytho语言就是for i in range(top,bottom,1),在本次循环结束之后,right-1,即右方一条边循环结束右边界向左收缩1。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值