關於爬樓梯問題以及優化

2021-08-15 19:10:52 字數 691 閱讀 1014

題目是這樣的:

假設你正在爬樓梯,一共有n階樓梯。但每次你只能爬一階或者兩階,你能有多少種不同的方法爬到樓頂部?

初出茅廬,面試被問到,回家做個筆記記錄一下。

最先想到的應該是用遞迴的方法解:

public static int climbstairs1(int n) else 

return ways;

}

這樣解表面固然沒毛病,但是學習演算法的時候應該聽過遞迴的方法慎用,慎用,慎用!重要的事情說3遍...這個方法當n很大時,時間複雜度成指數型的增長,問題很大啊~

於是乎,面試官問道,你有什麼優化的方法嘛?(我有好的方法,不就直接寫出來了嘛?不過感覺面試官都喜歡由淺入深,( ̄▽ ̄)")

上網查詢了一下,確實有一些不一樣的方法:

public static int climbstairs2(int n) 

return arr[n];

}

這個方法是利用動態規劃來解決問題的,利用陣列來儲存有多少種方法(與第一種那個方法比,實際就是利用空間換取時間,即空間複雜度很大),當n很大的時候,仍會出現問題,不過對於面試來說的話應該足夠了...

網上有種斐波那契數列的通項公式,有大神還能想得起來,做得出來,也是很強

public static int climbstairs4(int n)

爬樓梯問題

ok,前段時間在一篇blog上看到乙個關於樓梯的面試題,大概內容如下 現有乙個人,規定他上樓梯時只能一步走乙個台階或者兩個台階。要求 給定任意樓梯的階數,求共有多少種方法爬完樓梯。如果有經驗可以看出,這是一道遞迴的題目。不過這個遞迴 程式怎麼寫呢?我的思路是可以這樣想,不管他前面 怎麼爬,最後總是要...

爬樓梯問題

爬樓梯問題,每次可以走1步或者2步,爬上n層樓梯的總方法,這題就是乙個變相的fibonacci問題。當n 1時,有1種方法,即直接走1步 當n 2時,有2方法 連續走2步,或直接走兩步 對於n,設f n 為總方法,則 f n f n 1 f n 2 ps f n 1 即第一次走一步的走法,f n 2...

爬樓梯問題

蒜頭君自從春節回來以後,體重就像加了特技一樣duang duang 地暴增起來。於是小蒜頭打算每天爬樓梯來燃燒體內的脂肪 咦?蒜怎麼會有脂肪 蒜頭在爬樓梯的時候腦洞大開,因為蒜頭腿短,爬樓梯的時候一次只能邁1級或2級台階,它就想到了,假如一共有n級台階的話,它一共有多少種方法能夠爬到樓梯頂部呢?聰明...