216.组合总和III
https://programmercarl.com/0216.%E7%BB%84%E5%90%88%E6%80%BB%E5%92%8CIII.html#%E5%85%B6%E4%BB%96%E8%AF%AD%E8%A8%80%E7%89%88%E6%9C%AC
class Solution:def combinationSum3(self, k: int, n: int) -> List[List[int]]:result = [] # 存放结果集self.backtracking(n, k, 0, 1, [], result)return resultdef backtracking(self, targetSum, k, currentSum, startIndex, path, result):if currentSum > targetSum: # 剪枝操作return # 如果path的长度等于k但currentSum不等于targetSum,则直接返回if len(path) == k:if currentSum == targetSum:result.append(path[:])returnfor i in range(startIndex, 9 - (k - len(path)) + 2): # 剪枝currentSum += i # 处理path.append(i) # 处理self.backtracking(targetSum, k, currentSum, i + 1, path, result) # 注意i+1调整startIndexcurrentSum -= i # 回溯path.pop() # 回溯
17.电话号码的字母组合
https://programmercarl.com/0017.%E7%94%B5%E8%AF%9D%E5%8F%B7%E7%A0%81%E7%9A%84%E5%AD%97%E6%AF%8D%E7%BB%84%E5%90%88.html#%E6%80%9D%E8%B7%AF
class Solution:def letterCombinations(self, digits: str) -> List[str]:if digits == '':return []digit_letter = {'2':'abc', '3':'def','4':'ghi','5':'jkl','6':'mno','7':'pqrs','8':'tuv','9':'wxyz'}digits = list(digits)result = []self.backtracking(digit_letter, digits, 0, [], result)return resultdef backtracking(self, digit_letter, digits, index, path, result):if len(path) == len(digits):result.append(''.join(path[:]))returnletter = list(digit_letter[digits[index]])for i in range(0,len(letter)):path.append(letter[i])self.backtracking(digit_letter, digits, index + 1, path, result)path.pop()