322. Coin Change
2016-07-11 22:48
441 查看
You are given coins of different denominations and a total amount of money amount. Write a function to compute the fewest number of coins that you need to make up that amount. If that amount of money cannot be made up by any combination
of the coins, return
Example 1:
coins =
return
Example 2:
coins =
return
Note:
You may assume that you have an infinite number of each kind of coin.
递推方程 dp[i]=min{dp[i-j]}+1 1<j<=i
public static int coinChange(int[] coins, int amount)
{
int len=coins.length;
if(len<1)
return -1;
long[] dp=new long[amount+1];
for(int i=0;i<len;i++)
{
int num=coins[i];
if(num<=amount)
dp[num]=1;
}
for(int i=1;i<=amount;i++)
{
long min=Integer.MAX_VALUE;
for(int j=0;j<len;j++)
if(i-coins[j]>=0)
min=Math.min(min, dp[i-coins[j]]+1);
dp[i]=min;
}
long ret=dp[amount];
return (int) (ret==Integer.MAX_VALUE?-1:ret);
}
of the coins, return
-1.
Example 1:
coins =
[1, 2, 5], amount =
11
return
3(11 = 5 + 5 + 1)
Example 2:
coins =
[2], amount =
3
return
-1.
Note:
You may assume that you have an infinite number of each kind of coin.
递推方程 dp[i]=min{dp[i-j]}+1 1<j<=i
public static int coinChange(int[] coins, int amount)
{
int len=coins.length;
if(len<1)
return -1;
long[] dp=new long[amount+1];
for(int i=0;i<len;i++)
{
int num=coins[i];
if(num<=amount)
dp[num]=1;
}
for(int i=1;i<=amount;i++)
{
long min=Integer.MAX_VALUE;
for(int j=0;j<len;j++)
if(i-coins[j]>=0)
min=Math.min(min, dp[i-coins[j]]+1);
dp[i]=min;
}
long ret=dp[amount];
return (int) (ret==Integer.MAX_VALUE?-1:ret);
}
相关文章推荐
- 关键字搜索后描红
- Android 联系人数据库介绍以及对联系人的基本操作
- 沧桑,何尝不是一种美丽 ----红尘一笑
- AndroidManifest文件中注册
- es6绑定上下文
- nvl函数 oracle
- JS导出PDF插件(支持中文、图片使用路径)
- js兼容获取元素的样式
- centos7编译linux的内核源码
- Android studio常用插件合集
- hibernate调用oracle存储过程案列
- 每天一个linux命令(42)--traceroute命令
- 精通 Angular JS 第一天——Angular 之禅
- Linux命令速查手册,超详细Linux命令教程
- [leetcode]91. Decode Ways
- Python的函数
- 事务,DML,DDL,DCL的概念
- 330. Patching Array
- java是一门有未来的语言!
- spring四种依赖注入方式 (set,构造器,工厂,注解 )