难度:中等
给定一个仅包含数字 2-9
的字符串,返回所有它能表示的字母组合。答案可以按 任意顺序 返回。
给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。
本题非常简单
直接套模板可以很快写出
而且无需剪枝优化
算是最省心的回溯题了
代码实现(python):
两种写法
数组记录组合:
phone_map = {
'2': 'abc',
'3': 'def',
'4': 'ghi',
'5': 'jkl',
'6': 'mno',
'7': 'pqrs',
'8': 'tuv',
'9': 'wxyz',
}
class Solution:
def backtracking(self, digits, path, ans):
if len(path) == len(digits):
ans.append(''.join(path[:]))
return
sets = phone_map[digits[len(path)]]
for ch in sets:
path.append(ch)
self.backtracking(digits, path, ans)
path.pop()
def letterCombinations(self, digits: str) -> List[str]:
if len(digits) == 0:
return []
ans = []
self.backtracking(digits, [], ans)
return ans
字符串记录组合:
phone_map = {
'2': 'abc',
'3': 'def',
'4': 'ghi',
'5': 'jkl',
'6': 'mno',
'7': 'pqrs',
'8': 'tuv',
'9': 'wxyz',
}
class Solution:
def backtracking(self, digits, path, ans):
if len(path) == len(digits):
ans.append(path)
return
sets = phone_map[digits[len(path)]]
for ch in sets:
path += ch
self.backtracking(digits, path, ans)
path = path[:-1]
def letterCombinations(self, digits: str) -> List[str]:
ans = []
if len(digits) == 0:
return ans
self.backtracking(digits, '', ans)
return ans