一、刷题:
1.leetcode题目 216. 组合总和 III - 力扣(LeetCode)
class Solution:
def combinationSum3(self, k: int, n: int) -> List[List[int]]:
path = []
result = []
def dfs(k,s_index,path,result,c_n,n):
if c_n>n:
return ##剪枝操作
if len(path) == k and c_n == n:
result.append(path[:])
return
for i in range(s_index,9 - (k - len(path)) + 2):
c_n += i
path.append(i)
dfs(k,i+1,path,result,c_n,n)
path.pop()
c_n -= i
dfs(k,1,path,result,0,n)
return result
2.leetcode题目 17. 电话号码的字母组合 - 力扣(LeetCode)
class Solution:
def letterCombinations(self, digits: str) -> List[str]:
if not digits:
return list()
phoneMap = {
"2": "abc",
"3": "def",
"4": "ghi",
"5": "jkl",
"6": "mno",
"7": "pqrs",
"8": "tuv",
"9": "wxyz",
}
def backtrack(index: int):
if index == len(digits):
combinations.append("".join(combination))
else:
digit = digits[index]
for letter in phoneMap[digit]:
combination.append(letter)
backtrack(index + 1)
combination.pop()
combination = list()
combinations = list()
backtrack(0)
return combinations
(第二题有点没搞懂,明天再改一下)
自己编写版:
class Solution:
def letterCombinations(self, digits: str) -> List[str]:
if not digits:
return list()
Mapping = {
"2": "abc",
"3": "def",
"4": "ghi",
"5": "jkl",
"6": "mno",
"7": "pqrs",
"8": "tuv",
"9": "wxyz",
}
def dfs(index,result,combination):
if index == len(digits):
result.append("".join(combination))
else:
digit = digits[index]
for letter in Mapping[digit]:
combination.append(letter)
dfs(index+1,result,combination)
combination.pop()
result = []
dfs(0,result,[])
return result