跳台階問題

2021-06-08 17:27:04 字數 1656 閱讀 2346

題目:乙個台階總共有n級,如果一次可以跳1級,也可以跳2級。求總共有多少總跳法,並分析演算法的時間複雜度。

分析:這道題最近經常出現,包括microstrategy等比較重視演算法的公司都曾先後選用過個這道題作為面試題或者筆試題。

首先我們考慮最簡單的情況。如果只有1級台階,那顯然只有一種跳法。如果有2級台階,那就有兩種跳的方法了:一種是分兩次跳,每次跳1級;另外一種就是一次跳2級。

現在我們再來討論一般情況。我們把n級台階時的跳法看成是n的函式,記為f(n)。當n>2時,第一次跳的時候就有兩種不同的選擇:一是第一次只跳1級,此時跳法數目等於後面剩下的n-1級台階的跳法數目,即為f(n-1);另外一種選擇是第一次跳2級,此時跳法數目等於後面剩下的n-2級台階的跳法數目,即為f(n-2)。因此n級台階時的不同跳法的總數f(n)=f(n-1)+(f-2)。

我們把上面的分析用乙個公式總結如下: /1

n=1f(n)=

2n=2

\f(n-1)+(f-2)

n>2

分析到這裡,相信很多人都能看出這就是我們熟悉的fibonacci序列。至於怎麼求這個序列的第n項,請參考

本面試題系列第16題

,這裡就不在贅述了。

以上摘自何海濤部落格

網易博友216

如果題目簡單的變化一下。可以跳n級(1<=n<=台階的數目),那麼又是乙個題目了,歡迎討論

濤聲依舊

如果台階是n級,每次跳動的級數可以是1到n的任意級數。我的結論和網易博友22一致,f(n)=2(f-1)=2^(n-1)

首先不難得出f(1)=1,f(2)=2。當n=3時,第一步可以只要1級,此時跳的方法數等於f(n-1)=f(2)=2;第一次也可以跳2級,此時的跳的方法數等於f(n-2)=f(1)=1;第一次也可以直接跳3級,此時只有一種跳法。因此n=3時的跳法總數=2+1+1=4。

接下來我們可以用數學歸納法證明。感興趣的讀者可以自己證明。

濤聲依舊

再擴充套件一下(2023年摩根的筆試題):用8個1*2的小長條去覆蓋乙個2*8的棋盤,要求完全覆蓋棋盤,小長條彼此不重疊。求總共有多少總覆蓋方法。

先假設對於乙個2*n的棋盤,總覆蓋數為f(n)。

當n=1時,是乙個2*1的棋盤,只可能有乙個覆蓋方法,即 f(1) = 1

當n=2時,是乙個2*2的棋盤,有兩種可能,1)當最左邊堅著放乙個長條時,剩下沒放的地方就是乙個2*1的棋盤了;2)當最左上角橫著放乙個長條時,剩下左下角也只能橫著放乙個長條。綜上,有 f(2) = f(1) + 1 = 2

當n=3時,是乙個2*3的棋盤,1)當最左邊放乙個長條時,剩下沒放的地方是乙個2*2的棋盤;2)當最左上角橫著放乙個長條時,左下角也只有一種放法,即橫著放乙個長條,剩下右邊乙個2*1的空間沒放。綜上,f(3) = f(2) + f(1)

……依次類推。

綜上,只考慮最左邊的2*2棋盤,有兩種放法。1)當最左邊豎著放乙個長條時,剩下的就是f(n-1);2)當最左上角橫著放乙個長條時,最左下角也只可能橫著放乙個長條,這個就占用了最左邊2*2的棋盤,剩下的就是f(n-2)了。

故有 /  1                          n=1

f(n)=      2                          n=2

/  f(n-1)+f(n-2)              n>2

其實結論和原題是一樣的。

解答來自部落格

跳台階問題

有n個階梯,青蛙一次可以跳乙個或者兩個,求總共有多少種跳法可以到達頂端?思路 如果只有一階,那麼只有一種跳法 如果有2階,那麼有2中跳法 跳1階再跳1階,一次跳2階 那麼如果有n階呢?假設對於n階的階梯,我們有f n 中跳法 那麼n階時,我們考慮如果第一次跳共有兩種選擇 第一次跳了1階,剩下n 1階...

跳台階問題

題目 給定乙個有n個台階的樓梯,乙個人從下到上開始跳台階,這個人有兩種跳的方式 一次跳乙個台階,一次跳兩個台階 問 從台階底端跳到台階頂端,有多少種跳台階的方式?分析 首先我們考慮最簡單的情況。如果只有1個台階,那麼顯然只有一種跳法 如果是2級台階,那麼有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有多少種方案...