如何解决硬币找零问题自上而下的方法:未能解决以下面额为[357,239,73,52]和总计9832的情况
public int coinChange(int[] coins,int amount) {
return coinChange(coins,amount,new Integer[amount+1]);
}
private int coinChange(int[] coins,int remaining,int start,Integer[] memo){
if(remaining == 0){
return 0;
}
if(remaining<0){
return -1;
}
if(memo[remaining]!=null){
return memo[remaining];
}
int min = Integer.MAX_VALUE;
//but if I am running loop from i=0 it passes,I think it should work from start as well,as it already discover the optimal min in previous steps for example for [5,1,3,2] coins denominations,if I have to make 11 than going from 5 exploring 3,is same as going from 3 exploring 5,that's why I am staring from start.
for(int i=start; i<coins.length; i++){
int res = coinChange(coins,remaining-coins[i],i,memo);
if(res>=0){
min = Math.min(min,res+1);
}
}
min = ((min == Integer.MAX_VALUE) ? -1:min);
return memo[remaining] = min;
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。