剑指offer 10-II.青蛙跳台阶问题
思路
当n>2时,第一次跳的时候就有两种不同的选择:一是第一次只跳一级,此时的跳法数目等于后面剩下的n-1级台阶的跳法数目,即为f(n - 1);二是第一次跳两级,此时跳法数目等于后面剩下的n-2级台阶的跳法数目,也就是f(n - 2).因此n级台阶的不同跳法数目的总数等于f(n) = f(n - 1) + f(n -2)。
注意和斐波那契初始值不同。
代码
class Solution {
public:
int numWays(int n) {
long long result[2] = {1,1};
if(n < 2)
{
return result[n];
}
int first = 1;
int second = 1;
int sum = 2;
for(int i = 2; i <= n; i++)
{
sum = (first + second) % 1000000007;
first = second;
second = sum;
}
return sum;
}
};