題目描述
一隻青蛙一次可以跳上1級臺階,也可以跳上2級……它也可以跳上n級。求該青蛙跳上一個n級的臺階總共有多少種跳法。
題目分析
乍一眼看上去,此題好像不能使用之前的分析方法了,那麼換個思路,從後往前不行,那就從前往後。
f(1) = 1
f(2) = 1+ f(1)
......
f(n-1) = 1+f(1) +f(2) +...+ f(n-2) (3式)
f(n) = 1+ f(1) + f(2) +...+f(n-2) +f(n-1) (4式)
4式 - 3式得:f(n) = 2 * f(n-1),得出遞推公式,直接遞歸實現就可以了。
class Solution {
public:
int jumpFloorII(int number) {
if(0 == number)
return 0;
else if(1 == number)
return 1;
else
return 2 * jumpFloorII(number -1);
}
};
簡單解釋一下3式和4式:第n級臺階的跳法,其實就幾種場景:
1、從第n-1級跳到第n級。f(n-1)
2、從第n-2級直接跳到第n級。f(n-2)
......
n-1、從第一級直接跳到第n級。f(1)
n、從起點直接跳到第n級。f(0) = 1