题目:组合总和3
题解:
1)注意剪枝操作和返回的逻辑
2)k, n可以选择动态更新
代码:
class Solution(object):
def combinationSum3(self, k, n):
"""
:type k: int
:type n: int
:rtype: List[List[int]]
"""
res = []
path = []
# k = 2
# n = 18
def backtracking(k,n, startIndex):
if n < 0:#剪枝操作
return
if k==0:#这里的逻辑要注意,只要是元素个数达到了,即使求和未满足也应该停止。
if n == 0:
res.append(path[:])
return
for i in range(startIndex, 10 - k +1):#注意:这里的k表示还需要的元素个数
path.append(i)
backtracking(k - 1, n- i, i + 1)
path.pop()
backtracking(k, n, 1)
return res
题目:电话号码的字母组合
题解:
代码:
class Solution(object):
def __init__(self):
self.result = []
self.temp = ''
self.num = {'2':'abc','3':'def','4':'ghi','5':'jkl','6':'mno','7':'pqrs','8':'tuv','9':'wxyz'}
def letterCombinations(self, digits):
"""
:type digits: str
:rtype: List[str]
"""
if not digits:
return []
self.backtracking(digits, 0)
return self.result
def backtracking(self, digits, index):
if len(self.temp) == len(digits):
self.result.append(self.temp)
return
letters = self.num[digits[index]]##digits是一个字符串,竟然可以用索引值去寻找字符串内值
for letter in letters:
self.temp += letter
self.backtracking(digits, index + 1)
self.temp = self.temp[:-1]
return