Merge pull request #831 from casnz1601/patch-10

Update 0017.电话号码的字母组合.md
This commit is contained in:
程序员Carl
2021-10-13 18:17:44 +08:00
committed by GitHub

View File

@ -282,61 +282,74 @@ class Solution {
``` ```
## Python ## Python
**回溯**
```Python ```python3
class Solution: class Solution:
ans = [] def __init__(self):
s = '' self.answers: List[str] = []
letterMap = { self.answer: str = ''
'2': 'abc', self.letter_map = {
'3': 'def', '2': 'abc',
'4': 'ghi', '3': 'def',
'5': 'jkl', '4': 'ghi',
'6': 'mno', '5': 'jkl',
'7': 'pqrs', '6': 'mno',
'8': 'tuv', '7': 'pqrs',
'9': 'wxyz' '8': 'tuv',
} '9': 'wxyz'
}
def letterCombinations(self, digits):
self.ans.clear()
if digits == '':
return self.ans
self.backtracking(digits, 0)
return self.ans
def backtracking(self, digits, index):
if index == len(digits):
self.ans.append(self.s)
return
else:
letters = self.letterMap[digits[index]] # 取出数字对应的字符集
for letter in letters:
self.s = self.s + letter # 处理
self.backtracking(digits, index + 1)
self.s = self.s[:-1] # 回溯
```
python3
```py
class Solution:
def letterCombinations(self, digits: str) -> List[str]: def letterCombinations(self, digits: str) -> List[str]:
res = [] self.answers.clear()
s = "" if not digits: return []
letterMap = ["","","abc","def","ghi","jkl","mno","pqrs","tuv","wxyz"] self.backtracking(digits, 0)
if not len(digits): return res return self.answers
def backtrack(digits,index, s):
if index == len(digits): def backtracking(self, digits: str, index: int) -> None:
return res.append(s) # 回溯函数没有返回值
digit = int(digits[index]) #将index指向的数字转为int # Base Case
letters = letterMap[digit] #取数字对应的字符集 if index == len(digits): # 当遍历穷尽后的下一层时
for i in range(len(letters)): self.answers.append(self.answer)
s += letters[i] return
backtrack(digits, index+1, s) #递归注意index+1一下层要处理下一个数字 # 单层递归逻辑
s = s[:-1] #回溯 letters: str = self.letter_map[digits[index]]
backtrack(digits, 0, s) for letter in letters:
return res self.answer += letter # 处理
self.backtracking(digits, index + 1) # 递归至下一层
self.answer = self.answer[:-1] # 回溯
```
**回溯简化**
```python3
class Solution:
def __init__(self):
self.answers: List[str] = []
self.letter_map = {
'2': 'abc',
'3': 'def',
'4': 'ghi',
'5': 'jkl',
'6': 'mno',
'7': 'pqrs',
'8': 'tuv',
'9': 'wxyz'
}
def letterCombinations(self, digits: str) -> List[str]:
self.answers.clear()
if not digits: return []
self.backtracking(digits, 0, '')
return self.answers
def backtracking(self, digits: str, index: int, answer: str) -> None:
# 回溯函数没有返回值
# Base Case
if index == len(digits): # 当遍历穷尽后的下一层时
self.answers.append(answer)
return
# 单层递归逻辑
letters: str = self.letter_map[digits[index]]
for letter in letters:
self.backtracking(digits, index + 1, answer + letter) # 递归至下一层 + 回溯
``` ```