LeetCode 322 零錢兌換

2021-10-03 16:17:58 字數 1293 閱讀 4711

322. 零錢兌換

給定不同面額的硬幣 coins 和乙個總金額 amount。編寫乙個函式來計算可以湊成總金額所需的最少的硬幣個數。如果沒有任何一種硬幣組合能組成總金額,返回 -1。

示例 1:

輸入: coins = [1, 2, 5], amount = 11

輸出: 3 

解釋: 11 = 5 + 5 + 1

示例 2:

輸入: 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...