固定硬币变化回溯解决方案(暴力破解)
Fixing coin change Backtracking solution(bruteforce)
我知道这个解决方案的最佳问题是使用动态规划。但是,我想尝试这种蛮力回溯方法,我从数量中减去硬币并尝试找到与该数量匹配的组合,并在数量为 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
我是 LeetCode 的 7yier,你向他寻求帮助。
这是固定代码
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) 部分。
我知道这个解决方案的最佳问题是使用动态规划。但是,我想尝试这种蛮力回溯方法,我从数量中减去硬币并尝试找到与该数量匹配的组合,并在数量为 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
我是 LeetCode 的 7yier,你向他寻求帮助。 这是固定代码
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) 部分。