我正在解决一道leetcode问题17。电话号码的字母组合。我已经使用 Python3 编写了这个解决方案。
class Solution:
def letterCombinations(self, digits: str) -> List[str]:
transform={}
transform[2]=["a","b","c"]
transform[3]=["d","e","f"]
transform[4]=["g","h","i"]
transform[5]=["j","k","l"]
transform[6]=["m","n","o"]
transform[7]=["p","q","r","s"]
transform[8]=["t","u","v"]
transform[9]=["w","x","y","z"]
def fun(digits,idx):
if idx==len(digits):
return []
letters=transform[digits[idx]]
ans=[]
for letter in letters:
temp=fun(digits,idx+1)
for ele in temp:
ele=letter+ele
ans+=temp
return ans
return fun(digits,0)
但是我遇到了这个关键错误:
KeyError: '2'
letters=transform[digits[idx]]
Line 17 in fun (Solution.py)
return fun(digits,0)
Line 28 in letterCombinations (Solution.py)
ret = Solution().letterCombinations(param_1)
Line 47 in _driver (Solution.py)
_driver()
Line 58 in <module> (Solution.py)
我也见过这条线
print(f"transform.keys()={transform.keys()}")
。我将 transform.keys()=dict_keys([2, 3, 4, 5, 6, 7, 8, 9])
作为标准输出。这里出现了密钥 2。但我不明白为什么会出现 KeyError: '2' 。
请帮助我如何修复此错误。
您还没有给我们完整的代码,例如您调用该类的方式。
如果我理解正确的话,原因是因为您将键设置为整数,例如2或3,但是digits变量是字符串类型,并且当您尝试访问transform[digits[idx]]时,您也将digits[idx] 视为整数。但是,在 Python 中,对字符串进行索引会返回字符,而不是整数。这就是你收到 KeyError 的原因。
尝试使用此代码,如果它不起作用,请告诉我,并告诉我们完整的代码,就像您如何调用它一样:
class Solution:
def letterCombinations(self, digits: str) -> List[str]:
transform = {}
transform[2] = ["a", "b", "c"]
transform[3] = ["d", "e", "f"]
transform[4] = ["g", "h", "i"]
transform[5] = ["j", "k", "l"]
transform[6] = ["m", "n", "o"]
transform[7] = ["p", "q", "r", "s"]
transform[8] = ["t", "u", "v"]
transform[9] = ["w", "x", "y", "z"]
def fun(digits, idx):
if idx == len(digits):
return []
letters = transform[int(digits[idx])]
ans = []
for letter in letters:
temp = fun(digits, idx + 1)
for ele in temp:
ele = letter + ele
ans += temp
return ans
return fun(digits, 0)