1、跳台階
題目描述:
一隻青蛙一次可以跳上1級台階,也可以跳上2級。求該青蛙跳上一個n級的台階總共有多少種跳法(先後次序不同算不同的結果)。
思路分析:
一隻青蛙跳台階有兩種選擇,要麼跳一級,要麼跳兩級,是以可以列舉出以下幾種情況:
台階級數 跳法
1 1
2 2
3 3
4 5
5 8
… …
n n-1+n-2
經過分析可知,青蛙跳台階的跳法符合斐波那契數列,即f(n)=f(n-1)+f(n-2);
是以青蛙普通跳台階的代碼如下:
class Solution {
public:
int FibFloor(int n)
{
if(n==1)
{
return 1;
}
else if(n==2)
{
return 2;
}
else
{
return (FibFloor(n-1)+FibFloor(n-2));
}
}
int jumpFloor(int number) {
return FibFloor(number);
}
};
2、變态跳台階
題目描述:
一隻青蛙一次可以跳上1級台階,也可以跳上2級……它也可以跳上n級。求該青蛙跳上一個n級的台階總共有多少種跳法。
思路分析:
與上題不同的是,變态青蛙一次最多可以跳n級台階,是以每一級台階的跳法有很多,下面就先列舉一段分析;
台階級數 跳法
1 1
2 2
3 4
4 8
… …
n 2^(n-1)
經過分析可知,n級台階青蛙有2^(n-1)種跳法,代碼如下:
class Solution {
public:
int jumpFloorII(int number) {
//利用幂函數計算函數計算2^(n-1)
//return pow(2,number-1);
//利用移位運算符計算2^(n-1)
int a=1;
return a<<(number-1);
}
};