322. 零錢兌換
給定不同面額的硬幣 coins 和乙個總金額 amount。編寫乙個函式來計算可以湊成總金額所需的最少的硬幣個數。如果沒有任何一種硬幣組合能組成總金額,返回 -1。
示例 1:
輸入: coins = [1, 2, 5], amount = 11示例 2:輸出: 3
解釋: 11 = 5 + 5 + 1
輸入: coins = [2], amount = 3說明:輸出: -1
考察:動態規劃你可以認為每種硬幣的數量是無限的。
1 動態規劃 自下而上
#include #include #include using namespace std;
class solution
vectordp(amount + 1, amount + 1);
dp[0] = 0;
for (int val = 1; val <= amount; val++) }}
return (dp[amount] > amount) ? -1 : dp[amount];
}};
2 動態規劃 自上而下
#include #include #include using namespace std;
class solution
if (amount < 1)
// 初始化
m_minvalbank.resize(amount + 1, 0);
return dp(coins, amount);
}private:
int dp(vector& coins, int amount)
// 小於0
if (amount < 0)
if (m_minvalbank[amount] != 0)
int minval = int_max; // 當前最小值
for (size_t i = 0; i < coins.size(); i++)
}m_minvalbank[amount] = (minval == int_max) ? -1 : minval;
return m_minvalbank[amount];
}vectorm_minvalbank; // 記錄最優解
};
leetcode322 零錢兌換
給定不同面額的硬幣 coins 和乙個總金額 amount。編寫乙個函式來計算可以湊成總金額所需的最少的硬幣個數。如果沒有任何一種硬幣組合能組成總金額,返回 1。示例 1 輸入 coins 1,2,5 amount 11輸出 3解釋 11 5 5 1 示例 2 輸入 coins 2 amount 3...
leetcode 322 零錢兌換
給定不同面額的硬幣 coins 和乙個總金額 amount。編寫乙個函式來計算可以湊成總金額所需的最少的硬幣個數。如果沒有任何一種硬幣組合能組成總金額,返回 1。示例 1 輸入 coins 1,2,5 amount 11 輸出 3 解釋 11 5 5 1示例 2 輸入 coins 2 amount ...
LeetCode 322 零錢兌換
322 零錢兌換 題目 給定不同面額的硬幣 coins 和乙個總金額 amount。編寫乙個函式來計算可以湊成總金額所需的最少的硬幣個數。如果沒有任何一種硬幣組合能組成總金額,返回 1。示例 1 輸入 coins 1,2,5 amount 11 輸出 3 解釋 11 5 5 1 示例 2 輸入 co...