【Leetcode刷题笔记】LCR 103. 零钱兑换
发布时间:2023年12月26日
LCR 103. 零钱兑换
解题思路
- base case: 目标金额amount=0的时候,算法返回0 不需要任何硬币就可以凑出目标金额
- 确定状态:原问题和子问题中会变化的变量。由于硬币数量无限,硬币的面额也是题目给定的,只有目标金额会不断向base case 靠近,所以唯一的状态就是目标金额amount
- 确定选择,也就是导致状态产生变化的行为,每次选择一枚硬币,相当于减少了目标金额
- dp函数/数组的定义:dp数组的元素就是状态转移中会变化的量,也就是说到的状态-目标金额,dp函数的返回值就是题目需要计算的量—硬币数量
class Solution {
int[] memo;
public int coinChange(int[] coins, int amount) {
memo = new int[amount + 1];
Arrays.fill(memo,-666);
return dp(coins,amount);
}
int dp(int[] coins,int amount){
if(amount == 0){
return 0;
}
if(amount < 0){
return -1;
}
if(memo[amount] != -666){
return memo[amount];
}
int res = Integer.MAX_VALUE;
for(int coin:coins){
int sub = dp(coins,amount - coin);
if(sub == -1){
continue;
}
res = Math.min(res,sub + 1);
}
memo[amount] = (res == Integer.MAX_VALUE) ? -1:res;
return memo[amount];
}
}
文章来源:https://blog.csdn.net/qq_44653420/article/details/135226310
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:chenni525@qq.com进行投诉反馈,一经查实,立即删除!