518:零钱兑换 II
This commit is contained in:
parent
773929955e
commit
ba1b284ff8
89
src/main/java/leetcode/editor/cn/CoinChange2.java
Normal file
89
src/main/java/leetcode/editor/cn/CoinChange2.java
Normal file
@ -0,0 +1,89 @@
|
|||||||
|
//给定不同面额的硬币和一个总金额。写出函数来计算可以凑成总金额的硬币组合数。假设每一种面额的硬币有无限个。
|
||||||
|
//
|
||||||
|
//
|
||||||
|
//
|
||||||
|
//
|
||||||
|
//
|
||||||
|
//
|
||||||
|
// 示例 1:
|
||||||
|
//
|
||||||
|
// 输入: amount = 5, coins = [1, 2, 5]
|
||||||
|
//输出: 4
|
||||||
|
//解释: 有四种方式可以凑成总金额:
|
||||||
|
//5=5
|
||||||
|
//5=2+2+1
|
||||||
|
//5=2+1+1+1
|
||||||
|
//5=1+1+1+1+1
|
||||||
|
//
|
||||||
|
//
|
||||||
|
// 示例 2:
|
||||||
|
//
|
||||||
|
// 输入: amount = 3, coins = [2]
|
||||||
|
//输出: 0
|
||||||
|
//解释: 只用面额2的硬币不能凑成总金额3。
|
||||||
|
//
|
||||||
|
//
|
||||||
|
// 示例 3:
|
||||||
|
//
|
||||||
|
// 输入: amount = 10, coins = [10]
|
||||||
|
//输出: 1
|
||||||
|
//
|
||||||
|
//
|
||||||
|
//
|
||||||
|
//
|
||||||
|
// 注意:
|
||||||
|
//
|
||||||
|
// 你可以假设:
|
||||||
|
//
|
||||||
|
//
|
||||||
|
// 0 <= amount (总金额) <= 5000
|
||||||
|
// 1 <= coin (硬币面额) <= 5000
|
||||||
|
// 硬币种类不超过 500 种
|
||||||
|
// 结果符合 32 位符号整数
|
||||||
|
//
|
||||||
|
// 👍 456 👎 0
|
||||||
|
|
||||||
|
package leetcode.editor.cn;
|
||||||
|
|
||||||
|
import java.util.Arrays;
|
||||||
|
|
||||||
|
//518:零钱兑换 II
|
||||||
|
public class CoinChange2 {
|
||||||
|
public static void main(String[] args) {
|
||||||
|
//测试代码
|
||||||
|
Solution solution = new CoinChange2().new Solution();
|
||||||
|
System.out.println(solution.change(5,new int[]{1,2,5}));
|
||||||
|
System.out.println(solution.change(3,new int[]{2}));
|
||||||
|
System.out.println(solution.change(10,new int[]{10}));
|
||||||
|
}
|
||||||
|
|
||||||
|
//力扣代码
|
||||||
|
//leetcode submit region begin(Prohibit modification and deletion)
|
||||||
|
class Solution {
|
||||||
|
public int change(int amount, int[] coins) {
|
||||||
|
int[][] map = new int[coins.length][amount + 1];
|
||||||
|
for (int[] ints : map) {
|
||||||
|
Arrays.fill(ints, -1);
|
||||||
|
}
|
||||||
|
return dfs(coins, 0, amount, map);
|
||||||
|
}
|
||||||
|
|
||||||
|
int dfs(int[] coins, int i, int amount, int[][] map) {
|
||||||
|
if (amount == 0) {
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
if (amount < 0 || i == coins.length) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
if (map[i][amount] != -1) {
|
||||||
|
return map[i][amount];
|
||||||
|
}
|
||||||
|
int res = 0;
|
||||||
|
res += dfs(coins, i + 1, amount, map);
|
||||||
|
res += dfs(coins, i, amount - coins[i], map);
|
||||||
|
return map[i][amount] = res;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//leetcode submit region end(Prohibit modification and deletion)
|
||||||
|
|
||||||
|
}
|
44
src/main/java/leetcode/editor/cn/CoinChange2.md
Normal file
44
src/main/java/leetcode/editor/cn/CoinChange2.md
Normal file
@ -0,0 +1,44 @@
|
|||||||
|
<p>给定不同面额的硬币和一个总金额。写出函数来计算可以凑成总金额的硬币组合数。假设每一种面额的硬币有无限个。 </p>
|
||||||
|
|
||||||
|
<p> </p>
|
||||||
|
|
||||||
|
<ul>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<p><strong>示例 1:</strong></p>
|
||||||
|
|
||||||
|
<pre><strong>输入:</strong> amount = 5, coins = [1, 2, 5]
|
||||||
|
<strong>输出:</strong> 4
|
||||||
|
<strong>解释:</strong> 有四种方式可以凑成总金额:
|
||||||
|
5=5
|
||||||
|
5=2+2+1
|
||||||
|
5=2+1+1+1
|
||||||
|
5=1+1+1+1+1
|
||||||
|
</pre>
|
||||||
|
|
||||||
|
<p><strong>示例 2:</strong></p>
|
||||||
|
|
||||||
|
<pre><strong>输入:</strong> amount = 3, coins = [2]
|
||||||
|
<strong>输出:</strong> 0
|
||||||
|
<strong>解释:</strong> 只用面额2的硬币不能凑成总金额3。
|
||||||
|
</pre>
|
||||||
|
|
||||||
|
<p><strong>示例 3:</strong></p>
|
||||||
|
|
||||||
|
<pre><strong>输入:</strong> amount = 10, coins = [10]
|
||||||
|
<strong>输出:</strong> 1
|
||||||
|
</pre>
|
||||||
|
|
||||||
|
<p> </p>
|
||||||
|
|
||||||
|
<p><strong>注意</strong><strong>:</strong></p>
|
||||||
|
|
||||||
|
<p>你可以假设:</p>
|
||||||
|
|
||||||
|
<ul>
|
||||||
|
<li>0 <= amount (总金额) <= 5000</li>
|
||||||
|
<li>1 <= coin (硬币面额) <= 5000</li>
|
||||||
|
<li>硬币种类不超过 500 种</li>
|
||||||
|
<li>结果符合 32 位符号整数</li>
|
||||||
|
</ul>
|
||||||
|
<div><li>👍 456</li><li>👎 0</li></div>
|
Loading…
Reference in New Issue
Block a user