leetcode_322_零錢兌換:
給定不同面額的硬幣 coins 和乙個總金額 amount。編寫乙個函式來計算可以湊成總金額所需的最少的硬幣個數。如果沒有任何一種硬幣組合能組成總金額,返回 -1。
示例 1:
輸入: coins = [1, 2, 5], amount = 11
輸出: 3
解釋: 11 = 5 + 5 + 1
示例 2:
輸入: coins = [2], amount = 3
輸出: -1
求最有解,動態規劃解決。
解法1:暴力遞迴,超時,時間複雜度o(n^2)
classsolution
else
}public
static
int coinchange1(int coins, int
amount)
for (int
coin : coins)
}int min =integer.max_value;
for (int
coin : coins)
if (min ==integer.max_value)
else
}}
解法2:動態規劃
(1)定義狀態:假設dp(n)是湊到n分需要的最少硬幣個數
(2)求遞推式:
如果第 1 次選擇了 25 分的硬幣,那麼 dp(n) = dp(n – 25) + 1
如果第 1 次選擇了 20 分的硬幣,那麼 dp(n) = dp(n – 20) + 1
如果第 1 次選擇了 5 分的硬幣,那麼 dp(n) = dp(n – 5) + 1
如果第 1 次選擇了 1 分的硬幣,那麼 dp(n) = dp(n – 1) + 1
所以 dp(n) = min + 1
初始狀態:
dp[0]=0
所有dp[i]都初始化為integer.max_value
publicstatic
int coinchange(int coins, int
amount)
int dp = new
int[amount + 1];
for (int i = 1; i < amount + 1; i++)
if (i - coins[j] >= 0)
}if (min ==integer.max_value)
else
}return
dp[amount];
}
動態規劃 零錢兌換
問題描述 給定不同面額的硬幣 coins 和乙個總金額 amount。編寫乙個函式來計算可以湊成總金額所需的最少的硬幣個數。如果沒有任何一種硬幣組合能組成總金額,返回 1。你可以認為每種硬幣的數量是無限的。比如coins 1,2,5 amount 11,11 5 5 1,最終結果為3 演算法思路 本...
零錢兌換 動態規劃
給定不同面額的硬幣coins和乙個總金額amount。編寫乙個函式來計算可以湊成總金額所需的最少的硬幣個數。如果沒有任何一種硬幣組合能組成總金額,返回 1。你可以認為每種硬幣的數量是無限的。示例 1 輸入 coins 1,2,5 amount 11 輸出 3 解釋 11 5 5 1 示例 2 輸入 ...
動態規劃 零錢兌換
給定不同面額的硬幣 coins 和乙個總金額 amount。編寫乙個函式來計算可以湊成總金額所需的最少的硬幣個數。如果沒有任何一種硬幣組合能組成總金額,返回 1。你可以認為每種硬幣的數量是無限的。示例 1 輸入 coins 1,2,5 amount 11 輸出 3 解釋 11 5 5 1 示例 2 ...