Python字典存在对应键却触发KeyError问题求助(LeetCode17题)
问题分析与修复方案
1. KeyError 根源
你的字典transform使用整数类型(如2)作为键,但输入参数digits是字符串类型,digits[idx]取出的是字符串形式的数字(如'2')。由于字典中不存在'2'这个字符串键,因此触发KeyError: '2'。
2. 修复步骤
方法一:将字典键改为字符串类型
直接把transform的键改为对应字符串,和输入的数字格式保持一致:
transform = { '2': ["a","b","c"], '3': ["d","e","f"], '4': ["g","h","i"], '5': ["j","k","l"], '6': ["m","n","o"], '7': ["p","q","r","s"], '8': ["t","u","v"], '9': ["w","x","y","z"] }
方法二:将字符串数字转为整数
如果坚持用整数键,可以在取值时转换类型:
letters = transform[int(digits[idx])]
3. 递归逻辑的额外错误
除了KeyError,你的递归逻辑还有功能缺陷:当输入单个数字(如"2")时,会返回空列表。原因是递归终止条件返回[],导致最底层递归没有提供拼接的基础。需要修改:
- 终止条件:当
idx == len(digits)时,返回[""](空字符串,作为拼接的基础) - 拼接逻辑:将
letter + ele的结果添加到结果列表,而不是仅修改ele但不保存
修正后的完整代码
from typing import List class Solution: def letterCombinations(self, digits: str) -> List[str]: if not digits: # 处理空输入的边界情况 return [] transform = { '2': ["a","b","c"], '3': ["d","e","f"], '4': ["g","h","i"], '5': ["j","k","l"], '6': ["m","n","o"], '7': ["p","q","r","s"], '8': ["t","u","v"], '9': ["w","x","y","z"] } def fun(digits, idx): if idx == len(digits): return [""] # 返回空字符串作为拼接基础 current_digit = digits[idx] letters = transform[current_digit] ans = [] for letter in letters: # 递归获取后续数字的组合 temp = fun(digits, idx + 1) # 将当前字母与后续组合拼接 for ele in temp: ans.append(letter + ele) return ans return fun(digits, 0)
关键修改说明
- 新增空输入判断:题目要求输入空字符串时返回空列表
- 字典键改为字符串,匹配输入格式
- 递归终止返回
[""],确保单个数字能正确生成字母列表 - 拼接后直接将结果添加到
ans,而不是修改ele后丢弃
内容的提问来源于stack exchange,提问作者Wreetbhas Pal
相关产品推荐
相关产品推荐

