216. 组合总和 III
题目链接:力扣
思路:回溯
class Solution:
def combinationSum3(self, k: int, n: int) -> List[List[int]]:
path = []
res = []
def backtracking(n, k, startIndex):
if sum(path) == n and len(path) == k:
res.append(path[:])
return
elif sum(path) > n or len(path) > k:
return
for i in range(startIndex, 10):
path.append(i)
backtracking(n, k, i+1)
path.pop()
backtracking(n, k, 1)
return res
17. 电话号码的字母组合
题目链接:力扣
思路:回溯
涉及到两个集合,大集合和小集合,两层for循环,一层遍历digit,一层遍历digit内部字母
class Solution:
def letterCombinations(self, digits: str) -> List[str]:
path = ""
res = []
dic = {'1':'', '2':'abc', '3':'def', '4':'ghi', '5':'jkl', '6':'mno', '7':'pqrs', '8':'tuv', '9':'wxyz'}
def backtracking(digits, startIndex, path):
if(len(path) == len(digits)):
res.append(path)
return
for i in range(startIndex, len(digits)):
for j in range(0, len(dic[digits[i]])):
path += dic[digits[i]][j]
backtracking(digits, i+1, path)
path = list(path)
path.pop()
path = ''.join(path)
backtracking(digits, 0, path)
if digits == "":
return []
return res