518. 零钱兑换II(完全背包问题)

题目

题解

python 复制代码
class Solution:
    def change(self, amount: int, coins: List[int]) -> int:
        # 状态定义:dp[i][j]表示用前i种硬币,刚好凑齐面额j的方法有多少
        dp = [[0 for i in range(amount+1)] for j in range(len(coins)+1)]
        # base case
        for i in range(len(coins)+1):
            dp[i][0] = 1
        # 状态转移
        for i in range(1, len(coins) + 1):
            for j in range(1, amount + 1):
                # 第i枚硬币的面值小于要凑齐的面额,可以选择「用」和「不用」
                # 注意这里的判断条件是>=,与背包问题里的>有区别。
                if j - coins[i-1] >= 0:
                    dp[i][j] = dp[i-1][j] + dp[i][j - coins[i-1]]
                # 否则不能用
                else:
                    dp[i][j] = dp[i-1][j]
        return dp[len(coins)][amount]
相关推荐
吃着火锅x唱着歌17 分钟前
LeetCode 410.分割数组的最大值
数据结构·算法·leetcode
Blossom.11827 分钟前
把AI“刻”进玻璃:基于飞秒激光量子缺陷的随机数生成器与边缘安全实战
人工智能·python·单片机·深度学习·神经网络·安全·机器学习
摇滚侠39 分钟前
Spring Boot 3零基础教程,WEB 开发 默认页签图标 Favicon 笔记29
java·spring boot·笔记
YSRM42 分钟前
Leetcode+Java+图论+最小生成树&拓扑排序
java·leetcode·图论
YSRM42 分钟前
Leetcode+Java+图论+并查集
算法·leetcode·图论
Kratzdisteln1 小时前
【Python OOP Diary 1.1】题目二:简单计算器,改错与优化
python·面向对象编程
小白银子1 小时前
零基础从头教学Linux(Day 53)
linux·运维·python
小白杨树树1 小时前
【C++】力扣hot100错误总结
c++·leetcode·c#
skywalk81632 小时前
基于频域的数字盲水印blind-watermark
linux·开发语言·python