216.组合总和III
和给的代码写的不大一样,但思路基本一致。
class Solution:
def __init__(self):
self.ans = []
def combinationSum3(self, k: int, n: int) -> List[List[int]]:
self.backward(n, k, [])
return self.ans
def backward(self, n, k, pre):
if k == 0:
if n == 0:
self.ans.append(pre[:])
return
if pre == []:
l = 0
else:
l = pre[-1]
for i in range(l + 1, 10):
if n - i >= 0:
pre.append(i)
self.backward(n-i, k-1, pre)
pre.pop()
else:
return
return
17.电话号码的字母组合
怎么感觉回溯的套路都一样的
class Solution:
def letterCombinations(self, digits: str) -> List[str]:
self.ans = []
self.letters = [['a','b','c'], ['d','e','f'], ['g','h','i'], ['j','k','l'],
['m','n','o'], ['p','q','r', 's'], ['t','u','v'], ['w','x','y', 'z']]
nums = [s for s in digits]
self.backward(nums, [])
return self.ans
def backward(self, nums, pre):
if not nums:
if pre:
self.ans.append(''.join(pre[:]))
return
num = int(nums[0])
for s in self.letters[num - 2]:
pre.append(s)
self.backward(nums[1:], pre)
pre.pop()
return