• LeetCode 322 零钱兑换(动态规划)


    1.题目链接

    https://leetcode-cn.com/problems/coin-change/

    2.题目描述

    给定不同面额的硬币 coins 和一个总金额 amount。编写一个函数来计算可以凑成总金额所需的最少的硬币个数。如果没有任何一种硬币组合能组成总金额,返回 -1

    示例 1:

    输入: coins = [1, 2, 5], amount = 11
    
    输出: 3
    
    解释: 11 = 5 + 5 + 1

    示例 2:

    输入: coins = [2], amount = 3
    
    输出: -1

    说明:

    你可以认为每种硬币的数量是无限的。

    3.题目解析

    这道题目可以看做背包问题,用动态规划实现,dp[i]为金额i需要最少金额的个数,对于任意金额jdp[j] = Min(dp[j], dp[j - coins[i]] + 1);如果j - coins[i]存在,既能满足条件。

    4.代码实现

    int Min(int a, int b)
    {
        if(a < b)
            return a;
        else
            return b;
    }
    int coinChange(int* coins, int coinsSize, int amount){
        
        int *dp = (int*)malloc((amount + 1) * sizeof(int));
        dp[0] = 0;
        for (int i = 1; i <= amount; i++) { 
            dp[i] = amount + 1;
        }
        for (int i = 0; i < coinsSize; i++) {
            for (int j = coins[i]; j < amount + 1; j++) {
                    dp[j] = Min(dp[j], dp[j - coins[i]] + 1);
            }
        }
        if (dp[amount] > amount)
            return -1;
        return dp[amount];
    }

    5.提交记录

    执行用时分布 

    stay hungry, stay foolish
  • 相关阅读:
    第一课:人人站安装与使用教程
    linux 多个python版本的切换
    参考文章
    windows下scrapy 的安装
    vi 使用入门
    linux 源码安装
    C语言—第二次作业
    C语言第0次作业
    c语言博客园作业03函数
    tomcat对于web.xml的securityconstraint使用的处理机制
  • 原文地址:https://www.cnblogs.com/zygote/p/13118231.html
Copyright © 2020-2023  润新知