原题
我们可以用21的小矩形横着或者竖着去覆盖更大的矩形。请问用n个21的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法?
My Answer
解题思路:
依旧是典型回溯法,只需要找出递归规律即可,完事用回溯法实现。
事实上,这个规律开始并没有一眼看出,对于这种情况,可以先尝试做出几个结果之后找规律,如 n=0
时,对应 res[0] = 0
,res[1] = 1
,res[2] = 2
,res[3] = 3
, res[4] = 5
,发现规律 res[n] = res[n-1] + res[n-2]
,完事利用回溯法实现:
# -*- coding:utf-8 -*-
class Solution:
def jumpFloorII(self, number):
# write code here
res = []
res.extend([0, 1, 2])
# res[n] = res[n-1] + res[n-2] + ...+ res[0] + 1
if number > 2:
for i in range(3, number + 1):
res.append(sum(res[:i]) + 1)
return res[number]