一只青蛙一次可以跳上1级台阶,也可以跳上2级台阶。求该青蛙跳上一个 n
级的台阶总共有多少种跳法。
思路:
青蛙跳上一个n级台阶的跳法有两种:
第一种,从n - 1级台阶上跳一步(1级台阶)到n级台阶;
第二种,从n - 2级台阶跳2级台阶(两步)到n级台阶。
f(n) = f(n -1) + f(n - 2) 问题转化为求斐波那契数列的第n项。用动态规划来做。
class Solution {
public:
int numWays(int n) {
int a = 1, b = 2, t = 0;
if(n == 0) return 1;
if(n == 1) return 1;
if(n == 2) return 2;
for(int i = 3; i <= n; i++){
t = a;
a = b;
b = t + a;
if (b > 1000000007)
b = b% 1000000007;
}
return b;
}
};