LC322 - 硬币兑换

这道题类似背包问题,取或不取,也可取多个,可以用自底向上的动态规划解决,首先可以将递归式列出。

F(0) = 0;
F(n) = Min{F(n - a[0]), F(n - a[1]), F(n - a[2]), ... F(n - a[a.length - 1])} + 1;
其中a为硬币数组。

代码如下:

class Solution {
    public int coinChange(int[] coins, int amount) {
        if(coins.length == 0 || coins == null) return -1;
        int[] dp = new int[amount+1];
        dp[0] = 0;
        for(int i=1; i<=amount; i++){
            int minCount = Integer.MAX_VALUE;
            for(int j=0; j<coins.length; j++){
                if(i >= coins[j] && dp[i - coins[j]] != -1){
                    minCount = Math.min(dp[i - coins[j]] + 1, minCount);
                }
            }
            if(minCount == Integer.MAX_VALUE){
                dp[i] = -1;
            }else {
                dp[i] = minCount;
            }
        }
        return dp[amount];
    }
}
全部评论

相关推荐

运营你豪哥:简历改改吧-非本、求职意向技术岗、无实习经历、内容空洞 如果简历不爆改的话,应该是会持续崩溃了 1.把你教育经历放最下面去 2.蓝底照片很奇怪哈,感觉还在高中时代,建议白底重新拍一下 3.校园经历没啥必要,收集和反馈同学们对产品的意见,解决学生和老师之间的沟通,企业招聘不看这些哈 好好思考一下简历的设计和你要表达的重点,再去投简历
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务