
題目解析:計算泰波那契數列,每個數字是前面連續三個數字的總和,目標是找出數列中第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];
}
};

題目解析:給一個陣列代表每階樓梯的花費,每次支付完後可以選擇往上爬一階或跨兩階。一開始可以從第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]);
}
};