乙隻青蛙一次可以跳上1級台階,也可以跳上2級……它也可以跳上n級。求該青蛙跳上乙個n級的台階總共有多少種跳法。
我的想法:我記得這是乙個斐波那契數列的問題?但是做出來不對。
public class solution
int next=1;
int nn=0;
if(target-1>=1)
next=jumpfloorii(target-1);
if(target-2>=1)
nn=jumpfloorii(target-2);
int result=math.max(next,nn);
return result;}}
來,學習一下偉大的斐波那契數列吧!
「斐波那契數列
(fibonacci sequence),又稱
**分割
數列、因數學家列昂納多·斐波那契(leonardoda fibonacci)以兔子繁殖為例子而引入,故又稱為「
兔子數列
」,指的是這樣乙個數列:1、1、2、3、5、8、13、21、34、……在數學上,斐波納契數列以如下被以
遞迴的方法定義:f(0)=0,f(1)=1, f(n)=f(n-1)+f(n-2)(n>=2,n∈n*)」
那麼回到這個台階問題:
因為n級台階,第一步有n種跳法:跳1級、跳2級、到跳n級
跳1級,剩下n-1級,則剩下跳法是f(n-1)
跳2級,剩下n-2級,則剩下跳法是f(n-2)
所以f(n)=f(n-1)+f(n-2)+...+f(1)
因為f(n-1)=f(n-2)+f(n-3)+...+f(1)
所以f(n)=2*f(n-1)
所以如果用遞迴的話,**為:
public class solution else if (target == 1) else }}
如果是大神的話,**為:
return 1<
理由是:
當target等於1時,有1種跳法1<
target=2時,有2種跳法1<
target=3時,有4種跳法1<
target=4時,有8中跳法1<
乙隻青蛙一次可以跳上1級台階,也可以跳上2級。求該青蛙跳上乙個n級的台階總共有多少種跳法。
這個跟之前的不一樣在於,要麼跳1個,要麼跳2個,沒有其他的跳法了。
這裡的遞推公式是:
f(1)=1;
f(2)=2;
f(3)=f(1)+f(2)
f(4)=f(3)+f(2)
.....
f(n)=f(n-1)+f(n-2);
所以我的遞迴**,574ms
public class solution
if (target == 1)
if (target == 2)
int sum=jumpfloor(target-1)+jumpfloor(target-2);
return sum;}}
但是大神認為用遞迴的時間可能太長了,提出了另一種思路: 29ms
public class solution
if (target == 1)
if (target == 2)
int first = 1;
int second = 2;
int third = 0;
for(int i = 3; i <= target; i++)
return third;}}
f(1)=1;
f(2)=2;
f(3)=f(1)+f(2)
f(4)=f(3)+f(2)
f(5)=f(4)+f(3)
看出規律了嗎,這裡直接用迴圈就可以了,不需要遞迴,因為之前的f(3)f(4)都已經計算過了~~
青蛙跳台階(java)
一 問題描述 乙隻青蛙一次可以跳上1級台階,也可以跳上2級。求該青蛙跳上乙個n級的台階總共有多少種跳法。二 演算法分析 因為青蛙一次只能跳上1級台階或者兩級台階,所以對於第n級台階來說,青蛙只能從第n 1級台階或者第n 2級台階跳上。設青蛙跳上第n級台階有f n 種跳法,則 f n f n 1 f ...
青蛙跳台階
乙隻青蛙一次可以跳上1級台階,也可以跳上2級。求該青蛙跳上乙個n級的台階總共有多少種跳法。解題思路 1 如果兩種跳法,1階或者2階,那麼假定第一次跳的是一階,那麼剩下的是n 1個台階,跳法是f n 1 2 假定第一次跳的是2階,那麼剩下的是n 2個台階,跳法是f n 2 3 總跳法為 f n f n...
青蛙跳台階
之前面試遇到了這種題目,不會,後來搜尋了一下,感覺分析的很好 青蛙跳乙個n階的台階,每次可以跳1階或者2階,求跳完n階y有多少種方法。分析 n 1,f n 1 n 2,f n 2 n 3,f n 3 n 4,f n 5 可以發現 f n f n 1 f n 2 由此也可以推想 比如要跳到第4階樓梯上...