class Solution(object): def isSolvable(self, words, result): """ :type words: List[str] :type result: str :rtype: bool """ self.encode = {} self.avail_keys = [1,2,3,4,5,6,7,8,9,10] for c in reversed(result): for i in range(10): self.encode[c]=i for word in words: for l in word: # print(f"{i} and {l}") return True def is_letter_solvable(self, letters, result: int): # can the letters add up to the result? if len(letters) == 1: if result in self.avail_keys: self.encode[letters[0]] = result self.avail_keys.remove(result) return True else: return False for c in letters: if c in self.encode: i = self.encode[c] return self.is_letter_solvable(letters[1:], result - i) else: for i in self.avail_keys: pass