假设我们有一个称为硬币的值列表,另一个名为相同长度的数量的列表。第i个硬币的值是硬币[i],我们目前有第i个硬币的数量[i]。我们必须找到通过使用这些硬币的非空组可以获得的不同硬币总和值的数量。
因此,如果输入像硬币= [1、2、5]数量= [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()
。这需要我,res
if i is same as size of coins , then return for k in range 0 to quantities[i] + 1, do cur := res + k * coins[i] insert cur into fres rec(i + 1, cur) From the main method, do the following: fres := a new set rec(0, 0) return size of fres - 1
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