题解 | #兑换零钱(一)#

兑换零钱(一)

https://www.nowcoder.com/practice/3911a20b3f8743058214ceaa099eeb45

#
# 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
#
# 最少货币数
# @param arr int整型一维数组 the array
# @param aim int整型 the target
# @return int整型
#
class Solution:
    def minMoney(self , arr: List[int], aim: int) -> int:
        if len(arr) == 0:
            return -1
        dp = [0] * (aim+1) # 0到aim
        for i in range(1,aim+1): # aim=0结果是0,从1开始,1是当前aim
            tmp = i+1            # 初始值,如果最后没变,返回-1
            for num in arr:
                if i-num>=0:     # 如果减去num<0肯定不行
                    if dp[i-num] != -1 and dp[i-num]+1 < tmp: # i-num是不行的,1肯定也不行
                        tmp = dp[i-num] + 1     # 如果有更小的tmp则更新
            if tmp != i+1:       # 发生过更新则添加需要多少张,如果没更新说明没办法达成
                dp[i] = tmp
            else:
                dp[i] = -1
        return dp[-1]

全部评论

相关推荐

在看数据的傻狍子很忙碌:学生思维好重,而心很急,自己想想真的能直接做有难度的东西吗?任何错误都是需要人担责的,你实习生可以跑路,你的同事领导呢
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务