1-Description
一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。
2-Solution
1-问题分析
由【跳台阶】这一问题的分析,对于n级台阶我们可以很快得到下面的结论:
- 第1次如果跳1级,则剩下跳法是f(n-1)种
- 第1次如果跳2级,则剩下跳法有f(n-2)种
- 第1次如果跳3级,则剩下跳法有f(n-3)种
- ······
- 第1次如果跳n级,则跳法有f(1)种
所以总的跳法数为:
f
(
n
)
=
f
(
n
−
1
)
+
f
(
n
−
2
)
+
⋅
⋅
⋅
+
f
(
1
)
f(n) = f(n-1) + f(n-2) + ··· + f(1)
f(n)=f(n−1)+f(n−2)+⋅⋅⋅+f(1)
又考虑到
f
(
n
−
1
)
=
f
(
n
−
2
)
+
f
(
n
−
3
)
+
⋅
⋅
⋅
+
f
(
1
)
f(n-1) = f(n-2) + f(n-3) + ··· + f(1)
f(n−1)=f(n−2)+f(n−3)+⋅⋅⋅+f(1)
所以:
f
(
n
)
=
2
×
f
(
n
−
1
)
=
2
n
−
1
×
f
(
1
)
f(n) = 2 × f(n-1) = 2^{n-1} × f(1)
f(n)=2×f(n−1)=2n−1×f(1)
2-解决代码
根据以上步骤,可以得到如下解决代码:
class Solution {
public:
int jumpFloorII(int num) {
if(num < 1) return 0;
else return pow(2,num-1); //这里也可以用位操作来实现幂运算:1<<num-1
}
};