0️⃣python数据结构与算法学习路线
学习内容:
- 基本算法:枚举、排序、搜索、递归、分治、优先搜索、贪心、双指针、动态规划等…
- 数据结构:字符串(string)、列表(list)、元组(tuple)、字典(dictionary)、集合(set)、数组、队列、栈、树、图、堆等…
题目:
给定不同面额的硬币和一个总金额。写出函数来计算可以凑成总金额的硬币组合数。假设每一种面额的硬币有无限个。
输入输出:
输入: amount = 5, coins = [1, 2, 5]
输出: 4
解释: 有四种方式可以凑成总金额:
5=5
5=2+2+1
5=2+1+1+1
5=1+1+1+1+1
解题思路:
可以重复按使用,完全背包问题
状态方程:dp[i]+=dp[i-num]
算法实现:
class Solution(object):
def change(self, amount, coins):
"""
:type amount: int
:type coins: List[int]
:rtype: int
"""
# 完全背包问题,数组在外面循环
dp=[0]*(amount+1)
dp[0]=1
for num in coins:
for i in range(num,amount+1):# 已经是第二次忘记可以把num放进去就不用if i>num判断了
dp[i]+=dp[i-num]
return dp[-1]
出现问题:
1.问题分类