iT邦幫忙

2025 iThome 鐵人賽

DAY 14
0
自我挑戰組

leetcode解題學習java系列 第 16

30天LeetCode挑戰紀錄-DAY16. Climbing Stairs

  • 分享至 

  • xImage
  •  

題目

https://ithelp.ithome.com.tw/upload/images/20251001/20178158QWXRcD9bSA.png

題目說有一個樓梯總共有n階,我每次可以爬1階或2階。那我們要算出總共有幾種不同的走法可以到第n階呢。

想法

https://ithelp.ithome.com.tw/upload/images/20251001/20178158mNXBA60KqQ.jpg
因為之前有解過類似的數學題,所以就想說先畫圖找規律,然後畫到第五個的時候發現,四階的方法數=二階+三階的方法數,五階的方法數=三階+四階的。
所以我想說我先設兩個變數來代表一階跟二階的方法數,然後從第三階開始算到n,然後每次算完都把後面的變數值移到前面的變數,然後更新後面的變數值=剛剛算的方法數。
這樣以此類推一直算到n階。

程式碼

class Solution {
    public int climbStairs(int n) {
        //f(2)=2 
        //f(1)=1
        if(n==2) return 2;
        if(n==1) return 1;
   
        //動態規劃的初始值
        int prev1 =2; //f(n-1)
        int prev2 =1; //f(n-2)
        //從第三階開始計算
        for(int i=3;i<=n;i++){
            int current =prev1+prev2; //當前結果
            prev2=prev1; //更新f(n-2)
            prev1=current;//更新f(n-1)
        }
        return prev1;
    }
}

執行成功畫面
https://ithelp.ithome.com.tw/upload/images/20251001/20178158pwBQoZ7X45.png


上一篇
30天LeetCode挑戰紀錄-DAY15. 制定第三週目標+Dynamic Programming介紹
系列文
leetcode解題學習java16
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言