iT邦幫忙

2026 iThome 鐵人賽

DAY 11
0
Software Development

30天刷完leetcoode75系列 第 11 篇

C++ 演算法練習 Day11|746, 1137 題解與思路分享

  • 分享至 

  • xImage
  •  

https://ithelp.ithome.com.tw/upload/images/20260925/20184265fX1KvDmqTM.png

題目解析:計算泰波那契數列,每個數字是前面連續三個數字的總和,目標是找出數列中第n個位子的數字是多少。前三個起始數字固定為0、1、1
解題思路:因為題目n最大到37,先設一個大小為40的陣列v,把前三個數字分別設定為0、1、1當作起點。接著丟進迴圈從第3個位子開始跑,每次把前三個位子的數字加起來放進目前的位子。等迴圈一路跑到37結束後,完整的解答表就建好了,最後直接回傳陣列在第n個位子的數字即可

class Solution {
public:
    int tribonacci(int n) {
        vector<int> v(40);
        v[0] = 0;
        v[1] = 1;
        v[2] = 1;

        for(int i=3; i<=37; i++){
            v[i] = v[i-1] + v[i-2] + v[i-3];
        }

        return v[n];
    }
};

https://ithelp.ithome.com.tw/upload/images/20260925/20184265JB1rnOqJUD.png

題目解析:給一個陣列代表每階樓梯的花費,每次支付完後可以選擇往上爬一階或跨兩階。一開始可以從第0階或第1階起步,找出爬到整座樓梯最頂端最少需要耗費多少總花費
解題思路:先設一個陣列v,把第一階跟第二階的花費直接放進去當作基礎值。接著丟進迴圈從第三階開始往上跑,每次去比較「從前一階上來」跟「從前兩階上來」哪一種花費比較少,挑選便宜的再加上目前這階的花費,然後塞進v裡面記錄。最後回傳v裡面倒數第一跟倒數第二個數字中比較小的那一個

class Solution {
public:
    int minCostClimbingStairs(vector<int>& cost) {
        vector<int> v;
        v.push_back(cost[0]);
        v.push_back(cost[1]);

        for(int i=2; i<cost.size(); i++){
            v.push_back(min(v[i-2], v[i-1]) + cost[i]);
        }

        return min(v[v.size()-1], v[v.size()-2]);
    }
};

上一篇
C++ 演算法練習 Day10|933, 649 題解與思路分享
系列文
30天刷完leetcoode75 共 11 篇
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言