使用Python找出硬币列表和数量的不同硬币总数?
假设我们有一个名为coins的值列表,另一个列表称为相同长度的数量quantities。第i个硬币的值是coins [i],而我们目前有quantities [i]枚第i个硬币。我们必须通过使用这些硬币的非空组来找到不同硬币总值的数量。
因此,如果输入是像coins = [1,2,5] quantities = [1,2,1],则输出将是10,因为我们可以有以下不同的硬币总和 [1] = 1, [2] = 2, [1,2] = 3, [2,2] = 4, [5] = 5, [1,5] = 6, [2,5] = 7, [1,2,5] = 8, [2,2,5] = 9, [1,2,2,5] = 10。
要解决此问题,我们将遵循以下步骤:
定义函数rec()。这将采用i,res
如果i与coins的大小相同,则
返回
对于k范围从0到quantities [i] +1,执行
cur:=貌似+k*coins [i]
将cur插入fres
rec(i + 1, cur)
从主方法中,执行以下操作:
fres:=一个新集合
rec(0, 0)
返回fres的大小-1
更多Python相关文章,请阅读:Python 教程
示例
class Solution:
def solve(self, coins, quantities):
def rec(i, res):
if i == len(coins):
return
for k in range(0, quantities[i] + 1):
cur = res + k * coins[i]
fres.add(cur)
rec(i + 1, cur)
fres = set()
rec(0, 0)
return len(fres) - 1
ob = Solution()
coins = [1, 2, 5]
quantities = [1, 2, 1]
print(ob.solve(coins, quantities))
输入
[1, 2, 5],[1, 2, 1]
输出
10