给你不同面值的硬币和总金额target。 写一个函数来计算组成这个数量的组合的数量。
来源:互联网 发布:磐石软件 编辑:程序博客网 时间:2024/05/14 04:59
本题源自leetcode
-------------------------------------------------
思路1:
动态规划: 用一个target+1 的数组dp 记录金额j可以有多少种硬币组合。
代码:
int change(int amount, vector<int>& coins) { if(amount==0) return 1; int len=coins.size(); if(len==0) return 0; vector<int> dp(amount+1,0); dp[0]=1; for(int i=0;i<len;i++){ for(int j=coins[i];j<=amount;j++){ dp[j] += dp[j-coins[i]]; //当前金额的组合数量 } } return dp[amount]; }
思路 2:
int change(int amount, vector<int>& coins) { if(amount==0) return 1; int len=coins.size(); if(len==0) return 0; unordered_map<string,int> mp; sort(coins.begin(),coins.end()); return dfs(amount,coins,mp,len-1); } int dfs(int target,vector<int> &coins,unordered_map<string,int>& mp,int n){ if(target==0) return 1; if(target<0||n<0) return 0; string key=to_string(target)+"|"+to_string(n); if(mp.find(key)==mp.end()){ int include=dfs(target-coins[n],coins,mp,n); //包括这个硬币 int exclude=dfs(target,coins,mp,n-1); //不包括这个硬币 mp[key]=include+exclude; } return mp[key]; }
阅读全文
0 0
- 给你不同面值的硬币和总金额target。 写一个函数来计算组成这个数量的组合的数量。
- OJ硬币组合数量的分析
- 硬币的面值组合个数
- 硬币面值组合的算法题解
- 查询一个字段中不同的数量和列表
- 动态规划之不同数字组成数的数量
- 计算三角形的数量
- 硬币面值的组成多少种可能---Javascript实现
- 计算鸡和兔子的数量
- 有多少不同的面值组合
- 有多少不同的面值组合?_1072
- 有多少种不同的面值组合
- hdu 1085 面值为1.2.5的硬币不能组成的最小面值
- SQL 两个字段分组,其中一个字段的不同情形,分类并计算数量
- SQL,计算group by分组后组内不同值的数量
- 在同一个sql语句中写不同条件的count数量,和查询半年的数据
- 写一个方法来记录listView中的item数量(checkBox的选择)
- 计算列的合计数量
- HDFS租约机制
- 11
- SQLserver2008全角半角转换
- 代码优化②——阿里巴巴Java开发手册
- 点击空白回收键盘
- 给你不同面值的硬币和总金额target。 写一个函数来计算组成这个数量的组合的数量。
- JS完美运动框架详解——原理分析及demo
- 数独游戏
- [Design Pattern]Observer Pattern
- 长远价值较凸显
- Java集合的总结@2017.11.11-11.12
- 戴尔poweredge 1950的安装 fedora系统小记
- 欢迎使用CSDN-markdown编辑器
- HDFS节点内数据平衡