算法—跳臺階詳解
題目
一隻青蛙一次可以跳上1級臺階,也可以跳上2級。求該青蛙跳上一個n級的臺階總共有多少種跳法(先後次序不同算不同的結果)。
解題思路
用遞歸的思路比較好理解,跳到第n個臺階最後一步只有兩種可能,第一,從第n-1跳一級。第二,從n-2跳2級。也就是說f(n) = f(n-1) + f(n-2)
題目衍生
一隻青蛙一次可以跳上1級臺階,也可以跳上2級……它也可以跳上n級。求該青蛙跳上一個n級的臺階總共有多少種跳法。
對於這個也可以用上述思路思考一下。對於跳到第n個臺階,最後一步有n種方法,分別是跳1,2,3。。。。n級,對應的就是
-
f(n) = f(n-1)+f(n-2)…f(0) (1)
很容易得出 -
f(n-1) = f(n-2)+f(n-3)…f(0) (2)
將(2)式代入(1)式我們就能得到(3) -
f(n) = f(n-1)+f(n-1) (3)
代碼
- 跳臺階
class Solution {
public:
int jumpFloor(int number) {
if(number >= 0 && number <= 2)
{
return number;
}
return jumpFloor(number - 1) + jumpFloor(number - 2);
}
};
- 跳臺階拓展
class Solution {
public:
int jumpFloorII(int number) {
if(number >= 0 && number <= 2)
{
return number;
}
return 2 * jumpFloorII(number - 1);
}
};