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