mirror of
https://github.com/youngyangyang04/leetcode-master.git
synced 2025-07-09 03:34:02 +08:00
Merge pull request #831 from casnz1601/patch-10
Update 0017.电话号码的字母组合.md
This commit is contained in:
@ -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) # 递归至下一层 + 回溯
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user