四道題:
1、Fibonacci數列;
class Solution {
public:
int Fibonacci(int n) {
if(n<=1)
return n==0?0:1;
int op1=0,op2=1;
int res=0;
for(int i=2;i<=n;++i)
{
res=op1+op2;
op1=op2;
op2=res;
}
return res;
}
};
2、青蛙跳:一次1節或2節;
一隻青蛙一次可以跳上1級臺階,也可以跳上2級。求該青蛙跳上一個n級的臺階總共有多少種跳法。
class Solution {
public:
int jumpFloor(int number) {
//number=1,1種跳法
//number=2,2中跳法;一次跳一階,一次跳兩階
//number=n:分兩種情況。第一次跳一階,還有f(n-1)種;第一次跳兩階,還有f(n-2)種。
if(number<=2)
return number==1?1:2;
int op1=1;
int op2=2;
int res=0;
for(int i=3;i<=number;++i)
{
res=op1+op2;
op1=op2;
op2=res;
}
return res;
}
};
3、變態青蛙跳:一次1節或2節或…或n節;
一隻青蛙一次可以跳上1級臺階,也可以跳上2級……它也可以跳上n級。求該青蛙跳上一個n級的臺階總共有多少種跳法。
class Solution {
public:
int jumpFloorII(int number) {
//number=1;f(1)=1
//number=2;f(2)=2
//number=3;f(3)=f(1)+f(2)+1
//number=n;f(n)=f(1)+f(2)+....+f(n-1)+1
//f(n)=2^(n-1)
int res=1;
for(int i=1;i<number;++i)
{
res*=2;
}
return res;
}
};
4、矩形覆蓋:
可以用2*1的小矩形橫着或者豎着去覆蓋更大的矩形。請問用n個2*1的小矩形無重疊地覆蓋一個2*n的大矩形,總共有多少種方法?
class Solution {
public:
int rectCover(int number) {
//仍舊是fibonacci問題
if(number<=2)
return (number<=1)?(number==1?1:0):2;
int op1=1;
int op2=2;
int res=0;
for(int i=3;i<=number;++i)
{
res=op1+op2;
op1=op2;
op2=res;
}
return res;
}
};