Leetcode 3537. Fill a Special Grid

1. 解题思路

这一题思路上就是一个迭代的思路,显然,对于 N = 0 N=0 N=0的情况,答案是显而易见的,然后假设已知 N = k N=k N=k时的结果,考察 N = k + 1 N=k+1 N=k+1,此时显然其4个象限上的结果都是在 N = k N=k N=k的基础上进行一个平移,其中,一二三四四个象限的移动量分别为 3 × 2 2 m , 0 × 2 2 m , 2 × 2 2 m , 1 × 2 2 m 3\times 2^{2m}, 0\times 2^{2m}, 2\times 2^{2m}, 1\times 2^{2m} 3×22m,0×22m,2×22m,1×22m

因此,我们可以通过迭代的方式快速地得到任意 N N N下的结果。

2. 代码实现

给出python代码实现如下:

class Solution:
    @lru_cache(None)
    def specialGrid(self, N: int) -> List[List[int]]:
        if N == 0:
            return [[0]]
        sub = self.specialGrid(N-1)
        n = 2**N
        m = 2**(N-1)
        delta = m * m
        ans = [[0 for _ in range(n)] for _ in range(n)]
        for i in range(m):
            for j in range(m):
                ans[i][j] = 3*delta + sub[i][j]
                ans[i+m][j] = 2*delta + sub[i][j]
                ans[i][j+m] = sub[i][j]
                ans[i+m][j+m] = delta + sub[i][j]
        return ans

提交代码评测得到:耗时123ms,占用内存99.9MB。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值