zoukankan      html  css  js  c++  java
  • 0518零钱兑换II Marathon

    给你一个整数数组 coins 表示不同面额的硬币,另给一个整数 amount 表示总金额。

    请你计算并返回可以凑成总金额的硬币组合数。如果任何硬币组合都无法凑出总金额,返回 0 。

    假设每一种面额的硬币有无限个。

    题目数据保证结果符合 32 位带符号整数。

    示例 1:

    输入:amount = 5, coins = [1, 2, 5]
    输出:4
    解释:有四种方式可以凑成总金额:
    5=5
    5=2+2+1
    5=2+1+1+1
    5=1+1+1+1+1
    示例 2:

    输入:amount = 3, coins = [2]
    输出:0
    解释:只用面额 2 的硬币不能凑成总金额 3 。
    示例 3:

    输入:amount = 10, coins = [10]
    输出:1

    提示:

    1 <= coins.length <= 300
    1 <= coins[i] <= 5000
    coins 中的所有值 互不相同
    0 <= amount <= 5000

    来源:力扣(LeetCode)
    链接:https://leetcode-cn.com/problems/coin-change-2

    参考:

    python

    # 0518.零钱兑换II
    
    class Solution:
        def change(self, amount: int, coins: [int]) -> int:
            """
            动态规划, 完全背包
            :param amount:
            :param coins:
            :return:
            """
            dp = [0] * (amount+1)
            dp[0] = 1
            # 遍历物品
            for i in range(len(coins)):
                # 遍历背包
                for j in range(coins[i], amount+1):
                    dp[j] += dp[j-coins[i]]
            return dp[amount]
    
    
    if __name__ == "__main__":
        test = Solution()
        print(test.change(5, [1,2,5]))
    

    golang

    package dynamicPrograming
    
    // 动态规划-完全背包
    func change(amount int, coins []int) int {
    	dp := make([]int, amount+1)
    	dp[0] = 1
    	for i:=0;i<len(coins);i++ {
    		for j:=coins[i];j<=amount;j++ {
    			dp[j] += dp[j-coins[i]]
    		}
    	}
    	return dp[amount]
    }
    
    
  • 相关阅读:
    线性基学习笔记
    内网靶机-抓取票据
    域渗透
    flex元素的使用
    webpack 基本使用
    ES模块的导入
    作用域插槽
    具名插槽的使用
    slot插槽的基本使用
    vue中父子组件的访问方式
  • 原文地址:https://www.cnblogs.com/davis12/p/15626526.html
Copyright © 2011-2022 走看看