青蛙跳台階問題

2021-09-26 16:22:05 字數 1925 閱讀 4884

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

對問題的理解:n級台階,一次可以跳1級,也可以跳2級。如果第一次跳了1級,那麼剩下n-1級台階,n-1級台階的跳法有f(n-1);如果第一次跳了2級台階,剩下n-2級台階,剩下的n-2級台階的跳法有f(n-2).

f(1) = 1;

f(2) = 2;

f(n) = f(n-1) + f(n-2);

那麼可以把問題當成斐波那契數列來解決。

有3中方式。

1.遞迴方式

public int fibonacci(int n) 

if(n==2)

return fibonacci(n-2)+fibonacci(n-1);

}

遞迴方式需要重複的計算,時間複雜度o(2^n),空間複雜度o(n)

2.儲存方式

public int fibonacci(int n) 

if(n==2)

int ints = new int[n+1];

ints[1] = 1;

ints[2] = 2;

for(int i=2;i時間複雜度o(n),空間複雜度o(n)

3.簡化儲存方式

public int fibonacci(int n)

if(n==2)

int a = 1;

int b = 2;

int c = 0;

int i = 3;

while(i<=n)

return c;

}

由於計算n的話,只需要n-1,和n-2,所以可以在每次計算完之後值儲存n-1,n-2。

時間複雜度:o(n)

空間複雜度:o(1)

乙隻青蛙一次可以跳上1級台階,也可以跳上2級……它也可以跳上n級。求該青蛙跳上乙個n級的台階總共有多少種跳法。

分析:f(1) = 1;

f(2) = f(2-1) + f(2-2);

f(3) = f(3-1) + f(3-2) + f(3-3);

f(n) = f(n-1) + f(n-2) + f(n-3) + ... + f(n-(n-1))+ f(n-n);

public int jumpfloorii(int target) 

if(target == 2)

int res = 0;

int ints = new int[target+1];

ints[1] =1;

ints[2] =2;

ints[0] = 1;

for(int i=3;i0;j--)

}return ints[target];

}

我們可以用2*1的小矩形橫著或者豎著去覆蓋更大的矩形。請問用n個2*1的小矩形無重疊地覆蓋乙個2*n的大矩形,總共有多少種方法?

分析:

如果,總的容器是2*n,填充板是2*1,n是不確定的,從如圖所示的頂部開始填充,

f(1) = 1;(2*1) 豎著

f(2) = 2; (2*2) 橫著放和豎著放兩種,

f(3) =4  ;(2*3) 第3行橫著放,剩下兩行f(n-1)=f(2) = 3;豎著放,還剩1行f(n-2)=f(1)=1;

f(4) = ;(2*4)第n行橫著放,f(n-1)=?;豎著放,f(n-2)=?     f(n) = f(n-1)+f(n-2);

注意:外部盒子長度只有2(假設2為長,n為寬), 所以不用考慮長上面的變化,只需要考慮n上面的變化。

所以還是斐波那契數列。

青蛙跳台階問題

題目 乙隻青蛙一次可以跳上 1 級台階,也可以跳上2 級。求該青蛙跳上乙個n 級的台階總共有多少種跳法。我的思路 最開始我的思路是把這個看成是乙個數學問題,n i 1 k 2先把所有可能滿足這個公式的i和k求出來。然後在對i和k做排列組合。很明顯i的範圍應該是0 public int jumpflo...

青蛙跳台階問題

1 乙隻青蛙一次可以跳上 1 級台階,也可以跳上2 級。求該青蛙跳上乙個n 級的台階總共有多少種跳法。2 乙隻青蛙一次可以跳上1級台階,也可以跳上2 級 它也可以跳上n 級,此時該青蛙跳上乙個n級的台階總共有多少種跳法?分析 1 當n 1,只有1中跳法 當n 2時,有兩種跳法 當n 3 時,有3種跳...

青蛙跳台階問題

問題一 有乙隻青蛙,需要跳上100級台階。青蛙每次可以調一級或者兩級台階。問青蛙有多少種方式可以跳100級台階。思路 逆推 當青蛙站在100級台階上時,那它跳上100級時有可能是從99級跳一級上來的,也可能是從98級跳兩級跳上來的 從98級跳兩個一級包括在從99級跳一級情況內,所以不予考慮 所以f ...