博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
leetcode 322. 零钱兑换
阅读量:6527 次
发布时间:2019-06-24

本文共 1670 字,大约阅读时间需要 5 分钟。

 

 

/*****动态规划:DP方程:DP[i]中i表示当前兑换的面额,DP[i]为当前面额最少需要的硬币数DP[i]的初始值为INT_MAX-1;DP[coins[j]]的初始值为1;DP状态转移方程为:    for i:[1,amount]        for j:[0,len)            if(i>coins[j]) DP[i]=min(DP[i],DP[i-coins[j]]+1);            最终结果为DP[amount]如果DP[amount]==INT_MAX-1那么表示没有兑换成功,返回-1;****/class Solution {public:    int coinChange(vector
& coins, int amount) { if(amount==0) return 0; if(coins.size()==0) return -1; int len=coins.size(); vector
DP(amount+1,amount+1); DP[0]=0; for(int i=1;i<=amount;i++){ for(int j=0;j
=0) DP[i]=min(DP[i],1+DP[i-coins[j]]); } } return DP[amount]>amount?-1:DP[amount]; }};

 


 

动态规划:O(n*amount)时间复杂度,O(amount)空间复杂度,可以类比为coins[j] step上楼梯,最终为上到amont

/*****动态规划:DP方程:DP[i]中i表示当前兑换的面额,DP[i]为当前面额最少需要的硬币数DP[i]的初始值为INT_MAX-1;DP[coins[j]]的初始值为1;DP状态转移方程为:    for i:[1,amount]        for j:[0,len)            if(i>coins[j]) DP[i]=min(DP[i],DP[i-coins[j]]+1);            最终结果为DP[amount]如果DP[amount]==INT_MAX-1那么表示没有兑换成功,返回-1;****/class Solution {public:    int coinChange(vector
& coins, int amount) { int len=coins.size(); //边界:amount和len分别为0的情况; if(amount==0) return 0; if(len==0) return -1+2*(int)(amount==0); //amount和len都不为0的情况 vector
DP(amount+1,INT_MAX-1); for(int i=0;i
0) DP[i]=min(DP[i],DP[i-coins[j]]+1); } } if(DP[amount]==INT_MAX-1) return -1; else return DP[amount]; }};

 

转载于:https://www.cnblogs.com/joelwang/p/10874648.html

你可能感兴趣的文章
如何新建UML2项目?详细操作步骤介绍
查看>>
[精讲17] 组策略
查看>>
控制流
查看>>
interlij的快捷键
查看>>
如何在Rancher上运行Elasticsearch
查看>>
shell 找出数组元素中的最大值
查看>>
Vmware虚拟机linux系统混合模式上网
查看>>
MySQL在导入的时候遇到的错误
查看>>
存储初创公司Datera带着Amazon EBS走出隐身模式
查看>>
北大访问教授吴霁虹:如何把握AI产业化机遇并建立竞争优势 | CITE 2017
查看>>
LINUX 常用命令整理
查看>>
【云周刊】第134期:阿里云发布ECS企业级产品家族 19款实例族涵盖173个应用场景...
查看>>
iOS 位枚举
查看>>
关注ERP之根,基础数据的准备
查看>>
中兴计划2017年泰国收入实现50%的增长
查看>>
德国禁止Facebook利用WhatsApp用户信息:没法律基础
查看>>
全球太阳能产业掣肘在哪儿?
查看>>
“灾备全生态”全揭秘
查看>>
CSS盒子模型
查看>>
Zeppelin Prefix not found.
查看>>