【发布时间】:2022-01-06 06:53:11
【问题描述】:
我正在解决 LeetCode 的一个问题,https://leetcode.com/problems/verbal-arithmetic-puzzle/ 使用回溯。
这和 CryptArithmetic 问题是一样的,所以我会简单解释一下到底是什么问题。
class Solution:
def isSolvable(self,words, result):
characterMap={}
uniqueString=""
for word in words:
for letter in word:
if letter not in characterMap:
uniqueString+=letter
characterMap[letter]=-1
for r in result:
if r not in characterMap:
uniqueString+=r
characterMap[r]=-1
self.words=words
self.result=result
self.uniqueString=uniqueString
self.characterMap=characterMap
self.usedDigit={i:False for i in range(10)}
return self.isSolvableHelper(0)
def getSum(self, word):
sums=""
for w in word:
sums+=str(self.characterMap[w])
return int(sums)
def isSolvableHelper(self, idx):
if(idx==len(self.uniqueString)):
sumUp=0
for w in self.words:
sumUp+=self.getSum(w)
resultSum=self.getSum(self.result)
return True if(resultSum==sumUp) else False
char=self.uniqueString[idx]
for i in range(10):
if(not self.usedDigit[i]):
self.characterMap[char]=i
self.usedDigit[i]=True
self.isSolvableHelper(idx+1)
self.usedDigit[i]=False
self.characterMap[char]=-1
sol=Solution()
sol.isSolvable(['SEND','MORE'], "MONEY")
我考虑了与输入相同的示例,其中单词 array/list = ["SEND", "MORE"],结果是 MONEY
我遇到了一个无限循环,不确定发生在哪里,我怀疑 这可能是回溯开始的地方 这是输出,它只是继续运行
你能帮我看看我的逻辑有什么错误吗?
【问题讨论】:
-
你能发一个minimal reproducible example吗?特别是,导致无限循环的函数的输入是什么?另外,是什么让您认为无限循环恰好发生在该行代码上?
-
嗨,我已经更新了问题,添加了问题陈述和控制台中显示的输出,怀疑回溯块是问题所在
-
不确定它是否在循环:代码的可能性数量是 10 的阶乘 / 阶乘 (10 - len(unique string) 相当多。例如:10!/(10 -2)!=10!/2!=10*9*7*6*5*4*3 = 1814400。因为字符串的长度是 8。
标签: python recursion backtracking