题目描述
矩形覆盖
我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形。请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法?
跳台阶
一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果)。
解题思路
说白了以上两个问题属于同一个问题。
当然如果按照上述简单递归求解的话是很耗时的,因为其中含有很多重复操作,可以将每一次的计算结果保存到一个数组里,这样每次调用F(n)时到数组里查找即可。
AC代码
矩形覆盖
class Solution {
public:
int rectCover(int number) {
if(number == 0)
return 0;
if(number == 1)
return 1;
if(number == 2)
return 2;
return rectCover(number-1) + rectCover(number-2);
}
};
跳台阶
class Solution {
public:
int jumpFloor(int number) {
if(number == 0)
return 0;
if(number == 1)
return 1;
if(number == 2)
return 2;
return jumpFloor(number-1)+jumpFloor(number-2);
}
};