LeetCode-70.爬樓梯

寫在前沿:本文代碼均使用C語言編寫

Description:

假設(shè)你正在爬樓梯。需要 n 階你才能到達樓頂。

每次你可以爬 1 或 2 個臺階。你有多少種不同的方法可以爬到樓頂呢?

注意:給定 n 是一個正整數(shù)。

示例 1:

輸入: 2

輸出: 2

解釋: 有兩種方法可以爬到樓頂。

1.? 1 階 + 1 階

2.? 2 階

示例 2:

輸入: 3

輸出: 3

解釋: 有三種方法可以爬到樓頂。

1.? 1 階 + 1 階 + 1 階

2.? 1 階 + 2 階

3.? 2 階 + 1 階

Analysis:

題目看起來比較復(fù)雜,實際上是一類動態(tài)規(guī)劃問題:要上第N階臺階,只有兩種方案:從第N-1階臺階爬1階上去和從第N-2階臺階爬2階上去。而到達第N-1階臺階的方案同樣只有兩個,從第N-2階臺階爬1階和從第N-3階臺階爬2階上去...換句話說,到達第N階臺階的方案等于到達第N-1階的方案和加上到達第N-2階的方案和,所以要到達第N階臺階的動態(tài)規(guī)劃方程為sum(N)=sum(N-1)+sum(N-2)(看著是不是覺得很眼熟?)。當寫出這個方程的時候爬樓梯問題就轉(zhuǎn)換成了求斐波那契數(shù)列,一激動寫個遞歸解決問題,然后運行時間就超時了...遞歸是一類比較不錯的方案,代碼比較精簡,但是重復(fù)運算多,N較大情況下的運行時間一點都不精簡,所以只能改成非遞歸的形式來解決。這類方法個人覺得不是最優(yōu)解,所以其實更想請教請教是否有更好的方案來解決。

完整C代碼:

int climbStairs(int n) {

? ? if (n==1||n==2)

? ? ? ? return n;

? ? else{

? ? ? ? int a=1,b=2,sum;

? ? ? ? for(int i=2;i<n;i++){

? ? ? ? ? ? sum=a+b;

? ? ? ? ? ? a=b;b=sum;

? ? ? ? }

? ? ? ? return sum;

? ? }

//? ? return climbStairs(n-1)+climbStairs(n-2);//遞歸方法

}

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 題目: 假設(shè)你正在爬樓梯。需要 n 階你才能到達樓頂。 每次你可以爬 1 或 2 個臺階。你有多少種不同的方法可以...
    SenwinFeng閱讀 649評論 0 0
  • 問題描述 你正在爬樓梯。需要 n 步你才能到達頂部。 每次你可以爬 1 或 2 個臺階。你有多少種不同的方式可以爬...
    Dy1an閱讀 512評論 0 0
  • 在C語言中,五種基本數(shù)據(jù)類型存儲空間長度的排列順序是: A)char B)char=int<=float C)ch...
    夏天再來閱讀 4,066評論 0 2
  • 電影《芳華》,作家嚴歌苓的小說改編的。 她的文字,觀察人世通透,折射復(fù)雜的人心。 關(guān)于自卑 即使是在一個團體中,人...
    就上岸閱讀 171評論 0 1
  • android MediaCodec解析[https://wangyantao.github.io/mediaco...
    泉愛讀書閱讀 235評論 0 2

友情鏈接更多精彩內(nèi)容