關于爬樓梯算法分析

Q:

前段時間筆試文判,遇到了以前學的一個算法过椎,大學時沒認真想,只是記著怎么寫戏仓,現在得空疚宇,總結一下這個問題的解法。題目如下:

有個小孩正在上樓梯赏殃,樓梯有n階臺階敷待,小孩一次可以上1階、2階或3階仁热。實現一個算法榜揖,計算小孩有多少種上樓梯的方式。輸入n抗蠢,返回一個整數举哟。

A:

老師當年說呦,這個題目可以用遞歸迅矛,求出n-1妨猩,n-2,n-3級臺階的總和秽褒,就是答案壶硅。但是為啥嘞威兜,我來解釋一哈;

  1. 因為每次只能走1,2庐椒,3階牡属,所以,當一共5級臺階時扼睬,可以看成在走了4階基礎上再跨1階 + 走了3階基礎上再跨2階 + 走了2階基礎上再跨3階逮栅。示例圖如下??:


    臺階排列圖解.jpg
  1. 因此,對于n階臺階窗宇,可以看成走了n-1階基礎上再跨1階 + 走了n-2階基礎上再跨2階 + 走了n-3階基礎上再跨3階措伐。

即:f(n): f(n-1) + f(n-2) + f(n-3)

代碼如下:(OC,遞歸)

- (int)countBySteps:(int)steps
{
    int count = 0;
    
    if (steps == 0) {
        return 0;
    }
    if (steps == 1) {
        return 1;
    }else if (steps == 2){
        return 2;
    }else if (steps == 3){
        return 4;
    }else if (steps > 3){
        return [self countBySteps:steps-1] + [self countBySteps:steps-2] + [self countBySteps:steps-3];
    }
    
    return count;
}

測試:

int stepNum = 15;
NSLog(@"A %d級臺階军俊,共有上樓方式%d種",stepNum,[self countBySteps:stepNum]);

下面討論侥加,一次可以跨不止3級的情況,題目改成如下:

這小屁孩的老師作業(yè)留少了粪躬,閑著沒事爬樓梯担败,樓梯有s階臺階(steps),小孩一次可以上m階(maxStep)镰官。計算小孩有多少種上樓梯的方式提前。輸入s,m,返回一個整數泳唠。

  1. 由上例得:f(n) = f(n-1) + f(n-2) + f(n-3)狈网,
    那么當最多跨m階時為:f(s,m) = f(s-1) + f(s-2) + f(s-3) + ··· + f(s-m)
    那么先按最簡單遞歸法寫,哈哈哈笨腥,原諒我比較懶拓哺,其他方法會后續(xù)再補充,也歡迎大家一起討論~

  2. 參照上例思路脖母,我們可以在遞歸里分為兩大部分士鸥,一部分是 steps > maxStep 時,參照f(s,m) = f(s-1) + f(s-2) + f(s-3) + ··· + f(s-m)進行累加谆级。

  3. 我們現在看 steps <= maxStep 時烤礁,怎么給出類似上例里 f(2),f(3)的返回值哨苛。其實鸽凶,上例中的f(3)币砂,就是臺階一共3級建峭,最大可以跨三步的值,即f(2) 就是 f(2,2)决摧,f(3)就是f(3,3)亿蒸,你好好想想是不是這個理兒~
    所以凑兰,f(m,m)的圖解如下??:


    f(m,m)圖解.jpg

根據以上得出:
steps > maxStep 時,f(s,m) = f(s-1) + f(s-2) + f(s-3) + ··· + f(s-m);
steps <= maxStep時边锁,f(m,m) = f(m,m-1) +1;
steps = 1時姑食,return 1;
steps = 0時,return 0;

  1. so茅坛,算法如下:
  - (int)countBySteps:(int)steps MaxStep:(int)maxStep
  {
      int count = 0;

      if (steps == 0) {
          return count;
      }
      
      if (steps == 1) {
          count = 1;
      }else{
          if (steps > maxStep) {
              for (int i = 1; i <= maxStep; i++) {
                  count += [self countBySteps:(steps - i) MaxStep:maxStep];
              }
          }else{
              count = [self countBySteps:steps MaxStep:(steps - 1)] + 1;
          }
      }
      
      return count;
  }

測試??:

  int stepNum = 15;
  int maxStep = 3;

  NSLog(@"A %d級臺階音半,共有上樓方式%d種",stepNum,[self countBySteps:stepNum]);
  NSLog(@"B %d級臺階,共有上樓方式%d種",stepNum,[self countBySteps:stepNum MaxStep:maxStep]);

以上 <( ̄︶ ̄)>

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末贡蓖,一起剝皮案震驚了整個濱河市曹鸠,隨后出現的幾起案子,更是在濱河造成了極大的恐慌斥铺,老刑警劉巖彻桃,帶你破解...
    沈念sama閱讀 207,113評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現場離奇詭異晾蜘,居然都是意外死亡邻眷,警方通過查閱死者的電腦和手機,發(fā)現死者居然都...
    沈念sama閱讀 88,644評論 2 381
  • 文/潘曉璐 我一進店門剔交,熙熙樓的掌柜王于貴愁眉苦臉地迎上來肆饶,“玉大人,你說我怎么就攤上這事岖常《端” “怎么了?”我有些...
    開封第一講書人閱讀 153,340評論 0 344
  • 文/不壞的土叔 我叫張陵腥椒,是天一觀的道長阿宅。 經常有香客問我,道長笼蛛,這世上最難降的妖魔是什么洒放? 我笑而不...
    開封第一講書人閱讀 55,449評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮滨砍,結果婚禮上往湿,老公的妹妹穿的比我還像新娘。我一直安慰自己惋戏,他們只是感情好领追,可當我...
    茶點故事閱讀 64,445評論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著响逢,像睡著了一般绒窑。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上舔亭,一...
    開封第一講書人閱讀 49,166評論 1 284
  • 那天些膨,我揣著相機與錄音蟀俊,去河邊找鬼。 笑死订雾,一個胖子當著我的面吹牛肢预,可吹牛的內容都是我干的。 我是一名探鬼主播洼哎,決...
    沈念sama閱讀 38,442評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼烫映,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了噩峦?” 一聲冷哼從身側響起窑邦,我...
    開封第一講書人閱讀 37,105評論 0 261
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎壕探,沒想到半個月后冈钦,有當地人在樹林里發(fā)現了一具尸體,經...
    沈念sama閱讀 43,601評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡李请,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,066評論 2 325
  • 正文 我和宋清朗相戀三年瞧筛,在試婚紗的時候發(fā)現自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片导盅。...
    茶點故事閱讀 38,161評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡较幌,死狀恐怖,靈堂內的尸體忽然破棺而出白翻,到底是詐尸還是另有隱情乍炉,我是刑警寧澤,帶...
    沈念sama閱讀 33,792評論 4 323
  • 正文 年R本政府宣布滤馍,位于F島的核電站岛琼,受9級特大地震影響,放射性物質發(fā)生泄漏巢株。R本人自食惡果不足惜槐瑞,卻給世界環(huán)境...
    茶點故事閱讀 39,351評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望阁苞。 院中可真熱鬧困檩,春花似錦、人聲如沸那槽。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,352評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽骚灸。三九已至糟趾,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背拉讯。 一陣腳步聲響...
    開封第一講書人閱讀 31,584評論 1 261
  • 我被黑心中介騙來泰國打工涤浇, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留鳖藕,地道東北人魔慷。 一個月前我還...
    沈念sama閱讀 45,618評論 2 355
  • 正文 我出身青樓,卻偏偏與公主長得像著恩,于是被迫代替她去往敵國和親院尔。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 42,916評論 2 344

推薦閱讀更多精彩內容