zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    利用ResultFilter实现asp.net mvc3 页面静态化
    c#的DateTime.Now函数详解
    C#中使用DES和AES加密解密
    C#实现DES加密解密,AES加密解密
    MyEclipse的破解代码,适用各个版本
    C# DataGridView分页显示
    C# 对话框使用大全
    C# 通过串口发送短信
    C# axWindowsMediaPlayer制作播放器
    C#关于log4net(Log For Net)
  • 原文地址:https://www.cnblogs.com/zygote/p/13118231.html
Copyright © 2011-2022 走看看