LeetCode——59.螺旋矩阵II

128 篇文章 0 订阅

class Solution:
    def generateMatrix(self, n: int) -> List[List[int]]:
        
        if not n:
            return []
        res = [[0]*n for _ in range(n)]
        
        l,r,t,b = 0,n-1,0,n-1
        nums = [i for i in range(1,n*n+1)]
        index=0
        while True:
            #先从左往右打印,打印一行top就增加1,第二轮转过来肯定到第三行去了
            for i in range(l, r + 1):
                res[t][i] = nums[index] 
                index+=1
            t += 1
            #如果top都大于bottom 说明循环就结束了
            if t > b: 
                break
            #从上往下打印,当然横坐标是top+1开始,top层已经遍历过了
            for i in range(t, b + 1): 
                res[i][r] = nums[index]
                index+=1
            #遍历完右边这一列,右边的边界不得不减1 
            r -= 1
            #如果左边界大于右边界循环结束
            if l > r: 
                break
            #从右往左得起始坐标当然是r-1,因为右边那一列已经遍历结束了
            for i in range(r, l - 1, -1): 
                res[b][i] = nums[index]
                index+=1
            #遍历完下边得一层bottom自然而然要减去1
            b -= 1
            #再次判断top和bottom的大小关系
            if t > b: 
                break
            #从下往上,起始坐标当然是b-1.bottom已经遍历结束
            for i in range(b, t - 1, -1): 
                res[i][l] = nums[index]
                index+=1 
            #左侧遍历完l就要往右移动一下
            l += 1
            #如果左边大于右边那就结束遍历
            if l > r: 
                break
        return res
  • 对于螺旋矩阵的话就是从四个方向分别遍历即可
    • 从左到右,判断上下边界
    • 从上到下,判断左右边界
    • 从右到左,判断上下边界
    • 从下到上,判断左右边界

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值