diff --git a/src/main/java/leetcode/editor/cn/CoinChange2.java b/src/main/java/leetcode/editor/cn/CoinChange2.java new file mode 100644 index 0000000..274438e --- /dev/null +++ b/src/main/java/leetcode/editor/cn/CoinChange2.java @@ -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) + +} \ No newline at end of file diff --git a/src/main/java/leetcode/editor/cn/CoinChange2.md b/src/main/java/leetcode/editor/cn/CoinChange2.md new file mode 100644 index 0000000..45411f4 --- /dev/null +++ b/src/main/java/leetcode/editor/cn/CoinChange2.md @@ -0,0 +1,44 @@ +
给定不同面额的硬币和一个总金额。写出函数来计算可以凑成总金额的硬币组合数。假设每一种面额的硬币有无限个。
+ ++ +
示例 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 ++ +
+ +
注意:
+ +你可以假设:
+ +