1. 解题思路
这一题的话思路上我们走的是一个贪婪算法的思路,即从小到大依次考察,显然,每一次当前最小的非零面额有且必有当前组成情况差额为1的情况,然后我们考察拥有了该面额的金钱之后会对当前所有的面值构成总数产生怎样的变化,逐一考察即可得到所有所需的面值,如果其可能的话。
2. 代码实现
给出python代码实现如下:
class Solution:
def findCoins(self, numWays: List[int]) -> List[int]:
n = len(numWays)
ways = [1] + [0 for _ in range(n)]
ans = []
for i, num in enumerate(numWays):
d = i+1
if num == ways[d]:
continue
elif num - ways[d] != 1:
return []
ans.append(d)
new_ways = deepcopy(ways)
for j in range(d, n+1, d):
for k in range(n-j+1):
new_ways[k+j] += ways[k]
ways = new_ways
return ans
提交代码评测得到:耗时79ms,占用内存17.68MB。