
零钱兑换--动态规划
发布日期:2021-05-07 02:59:49
浏览次数:18
分类:精选文章
本文共 1463 字,大约阅读时间需要 4 分钟。
零钱兑换–动态规划

class Solution { public int coinChange(int[] coins, int amount) { /* 动态规划题解的特点:最小 最大 求最值 计算数量等等 边界条件 状态 选择 递归方程 与递归的区别 递归重复计算耗费不必要的计算上 动态规划利用数组减少了重复计算 动态规划:特点 整体最优解 包含了局部最优解 重叠子问题: 我们求11 元的最优解相当于求 min(11-5,11-2,11-1)三个当中的最优解 我们定义一个最优解的数组 长度为 amount+1 定义为总金额为amount 所需要的最少的硬币数量 如果我们凑不成该金额的硬币数 那么我们就将这个值设为正无穷,意思是我们没有办法在给定的硬币中选出一些来 凑出这个金额 地推公式 f[11] = min{f[11-2]+1,f[11-1]+1,f[11-5]+1}当中取最小值 求总金额为11 所需要的最小硬币数量 = min {金额为11-2所需要的最小数量 +1,金额为11-1所需要的最小数量 +1,金额为11-5所需 要的最小数量 +1} 三者取最小 */ int f[]= new int[amount+1]; //凑出金额为amount 的所需要的硬币数量 f[0]= 0 ;//边界条件 金额为0 的时候所需要的硬币为0 个 //注意 当金额f[i]的 i<0的时候,也就是我们没有办法拼出总金额为负数的硬币 应该设为正无穷枚硬币拼出 for(int i = 1; i< f.length; i++){ f[i] = Integer.MAX_VALUE; //初始化In设置为无法拼出该金额 //遍历硬币的数组看看是否能拼出 金额-coins[j] 的 最小值 for(int j = 0 ; j < coins.length ; j++){ if(i-coins[j]>=0 && f[i-coins[j]] !=Integer.MAX_VALUE ){ //这里的条件判断是细节重点 1.拼出的金额一定要大于等于0 2.我们的子问题不能是无法拼出的 也就是值不能为 //Integer.MAX_VALUE; 因为下一步比较的时候+1 会越界整数范围的 f[i] = Math.min(f[i],f[i-coins[j]]+1); } } } if(f[amount]== Integer.MAX_VALUE){ return -1; }else{ return f[amount]; } }}
发表评论
最新留言
网站不错 人气很旺了 加油
[***.192.178.218]2025年04月18日 09时41分42秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
Unity平台 | 快速集成华为性能管理服务
2021-05-09
详细实例教程!集成华为虚假用户检测,防范虚假恶意流量
2021-05-09
对模拟器虚假设备识别能力提升15%!每日清理大师App集成系统完整性检测
2021-05-09
使用Power BI构建数据仓库与BI方案
2021-05-09
pytest封神之路第二步 132个命令行参数用法
2021-05-09
Django认证系统并不鸡肋反而很重要
2021-05-09
快用Django REST framework写写API吧
2021-05-09
tep用户手册帮你从unittest过渡到pytest
2021-05-09
12张图打开JMeter体系结构全局视角
2021-05-09
Spring Cloud Alibaba基础教程:使用Nacos实现服务注册与发现
2021-05-09
Spring Boot 2.x基础教程:构建RESTful API与单元测试
2021-05-09
[书籍]通过《番茄工作法图解》复习番茄工作法
2021-05-09
[UWP 自定义控件]了解模板化控件(1):基础知识
2021-05-09
UWP 自定义控件:了解模板化控件 系列文章
2021-05-09
[UWP]从头开始创建并发布一个番茄钟
2021-05-09
在 Azure 上执行一些简单的 python 工作
2021-05-09
WinUI 3 Preview 3 发布了,再一次试试它的性能
2021-05-09
前端页面,90°翻转图片、滚动鼠标滑轮放大缩小图片
2021-05-09
前端页面,90°翻转图片、滚动鼠标滑轮放大缩小图片
2021-05-09
快速解决PL/SQL Developer过期问题(无需注册码等复杂操作)
2021-05-09