题目描述
大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0)。n<=39
解题思路
- 按照f(n) = f(n - 1) + f(n - 2)
class Solution {
public:
int Fibonacci(int n) {
if(n < 0){
return -1;
}
if(n == 0){
return 0;
}
int res[n + 1];
memset(res, 0, sizeof(int) * (n + 1));
res[1] = 1;
res[2] = 1;
for(int i = 3; i <= n; i++){
res[i] = res[i - 1] + res[i - 2];
}
return res[n];
}
};
题目描述
我们可以用21的小矩形横着或者竖着去覆盖更大的矩形。请问用n个21的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法?
解题思路
- 实质上是斐波那契数列的变形
- 想一想f(1) = 1, f(2) = 2, f3 = 3
- 按照f(n) = f(n - 1) + f(n - 2)
class Solution {
public:
int rectCover(int number) {
if(number< 0){
return -1;
}
if(number== 0){
return 0;
}
int res[number+ 1];
memset(res, 0, sizeof(int) * (number+ 1));
res[1] = 1;
res[2] = 2;
for(int i = 3; i <= number; i++){
res[i] = res[i - 1] + res[i - 2];
}
return res[number];
}
};