【问题标题】:Fixing coin change Backtracking solution(bruteforce)修复硬币变化回溯解决方案(蛮力)
【发布时间】:2022-07-01 01:16:06
【问题描述】:

我知道此解决方案的最佳问题是使用动态规划。但是,我想尝试这种蛮力回溯方法,我从金额中减去硬币并尝试找到与该金额匹配的组合,并在金额为 0 时找到组合数组长度的最小值。 但是,此递归调用无法正确检查所有组合。请以尽可能少的更改来编辑我的代码,因为这将帮助我了解在提出回溯解决方案时我做错了什么。 这是我的代码-

class Solution:
def coinChange(self, coins: List[int], amount: int) -> int:
    if amount == 0: 
        return 0  
    output = amount+1
    def backtrack(cur,arr):
        if cur == 0:
            print("happening")
            nonlocal output
            output = min(output,len(arr))
            return
        if cur<0:
            return
        
        for c in coins:
            print(cur,c,arr)
            if (cur-c) >=0:
                cur-=c
                arr.append(c)
                backtrack(cur,arr)
                arr.pop()
            else:
                continue

    arr = []
    backtrack(amount,arr)
    return output

【问题讨论】:

    标签: python backtracking recursive-backtracking


    【解决方案1】:
    class Solution:
        def coinChange(self, coins: List[int], amount: int) -> int:
            if amount == 0: 
                return 0  
            output = amount+1
            def backtrack(cur,arr):
                if cur == 0:
                    nonlocal output
                    output = min(output,len(arr))
                    return
                if cur<0:
                    return
    
                for c in coins:
                    if (cur-c) >=0:
                        arr.append(c)
                        backtrack(cur - c,arr)
                        arr.pop()
                    else:
                        continue
    
            arr = []
            backtrack(amount,arr)
            return output
    

    看起来问题在于您更改当前金额的位置。与其在新行上改变它,不如将它传递给改变的回溯函数。 我指的是 backtrack(cur - c, arr) 部分。

    【讨论】:

    • 非常感谢泰勒!!
    猜你喜欢
    • 1970-01-01
    • 2015-09-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-07
    • 2015-06-08
    • 2015-08-10
    • 2015-03-08
    相关资源
    最近更新 更多