216.组合总和III
思路: 类似于数组组合的题目求解,只有终止条件发生了改变,其他部分的结构没有发生改变。
class Solution:
def combinationSum3(self, k: int, n: int) -> List[List[int]]:
rightMax = 10
result = []
path = []
def backtracking(index):
if len(path) == k and sum(path) == n:
result.append(path.copy())
return
for i in range(index,rightMax):
path.append(i)
backtracking(i+1)
path.pop()
backtracking(1)
return result
17.电话号码的字母组合
整体思路: 对组合问题需要进行画图求解,例如本题可以做出如下的树形结构,根据对应的树形结构,对每一层的结构进行遍历。
class Solution:
def letterCombinations(self, digits: str) -> List[str]:
dic = {'2':'abc','3':'def','4':'ghi','5':'jkl','6':'mno','7':'pqrs','8':'tuv','9':'wxyz'}
n = len(digits)
index = 0
result = []
s = []
def backtracking(index):
if len(s) == n:
result.append(''.join(s))
return
# 比较关键的一步是遍历每一层的节点,将字符串问题转化为数组问题进行求解。
for num in dic[digits[index]]:
s.append(num)
backtracking(index+1)
s.pop()
if not digits:
return []
backtracking(0)
return result