原始题目:剑指 Offer 10- II. 青蛙跳台阶问题 (opens new window)
解题思路:
设跳上 级台阶可能有 中可能性,当青蛙跳到最后的时候,会有两种情况,一种是跳 级,一种是跳 级。
- 当为 级的时候,剩下的 级台阶有 种跳法。
 - 当为 级的时候,剩下的 级台阶有 种跳法。
 
因此很容易得到递推式
其递推性质为斐波那契数列,因此本题可以转化为斐波那契数列求第 n 项的做法。不同的是初始条件不同
- 本题的初始条件为 。
 - 斐波那契数列初始条件为 。
 
因此可以使用动态规划来接题。
代码:
public int numWays(int n) {
    if (n == 0 || n == 1) {
        return 1;
    }
    int a = 1;
    int b = 1;
    int sum = 0;
    while(--n > 0){
        sum = (a + b) % 1000000007;
        a = b;
        b = sum;
    }
    return sum;
}
 1
2
3
4
5
6
7
8
9
10
11
12
13
14
2
3
4
5
6
7
8
9
10
11
12
13
14
复杂度分析
时间复杂度:需要进行 次循环,每次循环的操作是 的。
空间复杂度:使用常数级的空间。
