【leetcode系列】【算法】【中等】螺旋矩阵 II

题目:

题目链接: https://leetcode-cn.com/problems/spiral-matrix-ii/

 

解题思路:

类似第54题: https://blog.csdn.net/songyuwen0808/article/details/105152189

预先生成一个n * n的矩阵

然后根据当前遍历方向,设置不同的状态,进行不同的处理

考虑好遍历是的下标就好

 

状态枚举值说明:

0 : 从左到右

1 : 从上到下

2 : 从右到左

3 : 从下到上

设cycle_num为当前转圈次数,则不同状态下的x、y下标为:

0 : x = cycle_num, y = range(cycle_num, n - cycle_num)

1 : x = range(cycle_num + 1, n - cycle_num), y = 0 - cycle_num - 1

2 : x = 0 - cycle_num - 1, y = range(n - cycle_num - 2, cycle_num - 1, -1)

3 : x = range(n - cycle_num - 2, cycle_num, -1), y = cycle_num

 

代码实现:

class Solution:
    def generateMatrix(self, n: int) -> List[List[int]]:
        state, cycle_num = 0, 0
        res = [[0 for _ in range(n)] for _ in range(n)]
        curr_num = 1
        while curr_num <= pow(n, 2):
            if state == 0:
                for index in range(cycle_num, n - cycle_num):
                    res[cycle_num][index] = curr_num
                    curr_num += 1
                state = 1
            elif state == 1:
                for index in range(cycle_num + 1, n - cycle_num):
                    res[index][0 - cycle_num - 1] = curr_num
                    curr_num += 1
                state = 2
            elif state == 2:
                for index in range(n - cycle_num - 2, cycle_num - 1, -1):
                    res[0 - cycle_num - 1][index] = curr_num
                    curr_num += 1
                state = 3
            elif state == 3:
                for index in range(n - cycle_num - 2, cycle_num, -1):
                    res[index][cycle_num] = curr_num
                    curr_num += 1
                state = 0
                cycle_num += 1
                
        return res

删除state后的逻辑:

class Solution:
    def generateMatrix(self, n: int) -> List[List[int]]:
        state, cycle_num = 0, 0
        res = [[0 for _ in range(n)] for _ in range(n)]
        curr_num = 1
        while curr_num <= pow(n, 2):
            for index in range(cycle_num, n - cycle_num):
                res[cycle_num][index] = curr_num
                curr_num += 1
            for index in range(cycle_num + 1, n - cycle_num):
                res[index][0 - cycle_num - 1] = curr_num
                curr_num += 1
            for index in range(n - cycle_num - 2, cycle_num - 1, -1):
                res[0 - cycle_num - 1][index] = curr_num
                curr_num += 1
            for index in range(n - cycle_num - 2, cycle_num, -1):
                res[index][cycle_num] = curr_num
                curr_num += 1
            cycle_num += 1
                
        return res

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值