8 劍指offer 跳台階

2021-10-03 07:37:46 字數 924 閱讀 4046

乙隻青蛙一次可以跳上1級台階,也可以跳上2級。求該青蛙跳上乙個n級的台階總共有多少種跳法(先後次序不同算不同的結果)。

比較傾向於找規律的解法,f(1) = 1, f(2) = 2, f(3) = 3, f(4) = 5,  可以總結出f(n) = f(n-1) + f(n-2)的規律,但是為什麼會出現這樣的規律呢?假設現在6個台階,我們可以從第5跳一步到6,這樣的話有多少種方案跳到5就有多少種方案跳到6,另外我們也可以從4跳兩步跳到6,跳到4有多少種方案的話,就有多少種方案跳到6,其他的不能從3跳到6什麼的啦,所以最後就是f(6) = f(5) + f(4);這樣子也很好理解**跳台階的問題了。

class solution 

if (number == 1)

if (number == 2)

int first = 1, second = 2, third = 0;

for (int i = 3; i <= number; i++)

return third;

}};

可以用動態規劃來求解該題

跳到第n個台階,只有兩種可能

從第n-1個台階跳1個台階

從第n-2個台階跳2個台階

只需求出跳到第n-1個台階和第n-2個台階的可能跳法即可

f(n):n個台階的跳法

遞推公式:f(n)=f(n-1)+f(n-2)

不難發現這是乙個斐波那契數列

起始條件為f(0)=1,f(1)=1

解法一:自底向上,使用迭代

public class solution 

return result;

}}

解法二:自頂向下,使用遞迴

public class solution

8 劍指offer 跳台階

題目描述 乙隻青蛙一次可以跳上1級台階,也可以跳上2級。求該青蛙跳上乙個n級的台階總共有多少種跳法。解題思路 f n f n 1 f n 2 且0 1 2需要單獨處理 1 include 2 using namespace std 3class solution 9int f1 1 10 int f...

劍指offer 8 跳台階

題目描述 乙隻青蛙一次可以跳上1級台階,也可以跳上2級。求該青蛙跳上乙個n級的台階總共有多少種跳法 思路 由題可知,青蛙跳台階,跳上n階,可以一階一階的跳,也可以兩階兩階的跳,還可以交叉來。如果函式f n 表示跳到n階的方法,那麼如果最後一次跳一階,則前面有f n 1 種,如果最後是跳2階,則前面有...

劍指Offer 8 跳台階

乙隻青蛙一次可以跳上1級台階,也可以跳上2級。求該青蛙跳上乙個n級的台階總共有多少種跳法。coding utf 8 class solution def jumpfloor self,number write code here if number 0 return 0 a 1 b 1 for in...