題目:
乙個台階總共有n 級,如果一次可以跳1 級,也可以跳2 級,求總共有多少總跳法,並分析演算法的時間複雜度。
注:這道題最近經常出現,包括microsoft 等比較重視演算法的公司都曾先後選用過個這道題作為面試題或者筆試題。
思路一:
首先我們考慮最簡單的情況:如果只有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(n-2)。
我們把上面的分析用乙個公式總結如下:
/ 1 (n=1)
f(n) = 2 (n=2)
\ f(n-1) + (f-2) (n>2)
分析到這裡,相信很多人都能看出這就是我們熟悉的fibonacci 序列。(o(n)
///非遞迴方法
int fibonacci1(unsigned int n)
return fibn;
}
拓展:
如果能走3個台階呢?又該如何做?
拓展:
如果能走3個台階呢?又該如何做?
走樓梯問題
宣告 題目來自 自己先做一遍。27.跳台階問題 題目 乙個台階總共有n級,如果一次可以跳1級,也可以跳2級。求總共有多少總跳法,並分析演算法的時間複雜度。這道題最近經常出現,包括microstrategy等比較重視演算法的公司都 曾先後選用過個這道題作為面試題或者筆試題。思路 一開始我想到的方法就是...
C 面試題之程式設計其他問題面試題
程式設計其他問題面試題.cpp main主函式執行完畢後,是否可能會再執行一段 給出說明。美國某著名網路開發公司2005年面試題 答案 如果需要加入一段在main退出後執行的 可以使用atexit 函式註冊乙個函式,如下 include int atexit void funtion void in...
面試題之flex問題
flex 0 1 auto是什麼 flex是flex grow,flex shrink,flex basis3個屬性結合在一起的縮寫形式,後兩個屬性可選寫 flex grow 表示當子元素的空間小於父元素的空間時,如何處理剩餘空間,預設值為0表示不占有剩餘空間 當子元素都設定為1時表示平均分配剩餘空...