📅  最后修改于: 2023-12-03 15:41:37.704000             🧑  作者: Mango
这个问题实际上可以转化为数学问题。我们可以设 $f(n)$ 表示用 “1 x 4” 图块填充 “n x 4” 网格的方式数量。
我们考虑填充最后一列的情况:
因此,我们可以得到递推公式: $$f(n) = f(n-1) + f(n-1) + f(n-2) + f(n-3) + 1$$ 不难发现,$f(1)=1,f(2)=2,f(3)=4,f(4)=8$。我们就可以利用递推公式计算 $f(n)$。
下面是一个 Python 实现:
def count_ways(n):
if n == 1:
return 1
elif n == 2:
return 2
elif n == 3:
return 4
else:
a, b, c, d = 1, 2, 4, 8
for i in range(5, n+1):
a, b, c, d = b, c, d, a+b+c+d
return d
这个实现的时间复杂度为 $O(n)$。当然,我们也可以使用矩阵乘法等方法进一步优化时间复杂度。