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。