原题题目
代码实现(首刷自解)
int coinChange(int* coins, int coinsSize, int amount){
unsigned long* dp = (unsigned long*)malloc(sizeof(unsigned long) * (amount+1));
int i,j;
dp[0] = 0;
for(i=1;i<=amount;i++)
{
dp[i] = INT_MAX;
for(j=0;j<coinsSize;j++)
{
if(i >= coins[j] && dp[i-coins[j]] || i == coins[j])
dp[i] = fmin(dp[i-coins[j]]+1,dp[i]);
}
}
if(dp[amount] != INT_MAX)
return dp[amount];
else
return -1;
}
代码实现(二刷DAY 95 C++自解)
class Solution {
public:
int coinChange(vector<int>& coins, int amount) {
vector<int> dp(amount+1,INT_MAX);
dp[0] = 0;
for(int i=1;i<=amount;++i)
{
for(const auto& coin:coins)
{
if(coin > i || dp[i-coin] == INT_MAX) continue;
dp[i] = min(dp[i],dp[i-coin]+1);
}
}
return (dp[amount] == INT_MAX) ? -1:dp[amount];
}
};
代码实现(三刷看了一下思路点拨- - DAY 160 C++)
class Solution {
public:
int coinChange(vector<int>& coins, int amount) {
vector<int> dp(amount+1,-1);
dp[0] = 0;
for(int i=1;i<=amount;++i)
{
for(const auto& num:coins)
{
if(i < num) continue;
if(dp[i-num] != -1)
{
if(dp[i] == -1) dp[i] = dp[i-num] + 1;
else dp[i] = min(dp[i],dp[i-num] + 1);
}
}
}
return dp[amount];
}
};
代码实现(四刷自解 DAY 203 C++)
class Solution {
public:
int coinChange(vector<int>& coins, int amount) {
vector<int> dp(amount+1,-1);
dp[0] = 0;
for(int i = 1;i <= amount;++i)
{
for(const auto& coin:coins)
{
if(i < coin || dp[i-coin] == -1) continue;
if(dp[i] == -1) dp[i] = dp[i-coin] + 1;
else dp[i] = min(dp[i],dp[i-coin] + 1);
}
}
return dp[amount];
}
};
代码实现(五刷自解 DAY 287 C++)
class Solution {
public:
int coinChange(vector<int>& coins, int amount) {
vector<int> dp(amount + 1, INT_MAX);
dp[0] = 0;
for (int i = 1; i <= amount; ++i) {
for (const auto& coin : coins) {
if (i < coin || dp[i - coin] == INT_MAX) continue;
dp[i] = min(dp[i - coin] + 1, dp[i]);
}
}
return dp[amount] == INT_MAX ? -1 : dp[amount];
}
};
代码实现(六刷自解 DAY 6 Golang)
func min(x, y int) int {
if x <= y {
return x
} else {
return y
}
}
func coinChange(coins []int, amount int) int {
dp := make([]int, amount + 1)
const INT_MAX int = int(^uint(0) >> 1)
for i, _ := range dp {
dp[i] = INT_MAX
}
dp[0] = 0
sort.Ints(coins)
for i := 1; i <= amount; i++ {
for _, coin := range coins {
if coin > i || dp[i - coin] == INT_MAX {
continue
}
if dp[i] == INT_MAX {
dp[i] = dp[i - coin] + 1
} else {
dp[i] = min(dp[i], dp[i - coin] + 1)
}
}
}
if dp[len(dp) - 1] == INT_MAX {
dp[len(dp) - 1] = -1
}
return dp[len(dp) - 1]
}