216.组合总和III
class Solution(object):
def backtracking(self, k, n, path, result, starti):
if n==0 and k==0:
result.append(path[:])
return
for i in range(starti, min(n+1,10)):
path.append(i)
self.backtracking(k-1, n-i, path, result, i+1)
path.pop()
def combinationSum3(self, k, n):
"""
:type k: int
:type n: int
:rtype: List[List[int]]
"""
path = []
result = []
self.backtracking(k, n, path, result, 1)
return result
17.电话号码的字母组合
class Solution(object):
def backtracking(self, digits, comb, results):
if not digits:
if comb:
results.append(''.join(comb))
return
if digits[0]!='1' and digits[0]!='7' and digits[0]!='8' and digits[0]!='9':
for i in range(3*(int(digits[0])-2), 3*(int(digits[0])-1)):
comb.append(chr(ord('a')+i))
self.backtracking(digits[1:], comb, results)
comb.pop()
elif digits[0]=='7':
for i in range(3*(int(digits[0])-2), 3*(int(digits[0])-1)+1):
comb.append(chr(ord('a')+i))
self.backtracking(digits[1:], comb, results)
comb.pop()
elif digits[0]=='8':
for i in range(3*(int(digits[0])-2)+1, 3*(int(digits[0])-1)+1):
comb.append(chr(ord('a')+i))
self.backtracking(digits[1:], comb, results)
comb.pop()
elif digits[0]=='9':
for i in range(3*(int(digits[0])-2)+1, 3*(int(digits[0])-1)+2):
comb.append(chr(ord('a')+i))
self.backtracking(digits[1:], comb, results)
comb.pop()
elif digits[0]=='1':
self.backtracking(digits[1:], comb, results)
def letterCombinations(self, digits):
"""
:type digits: str
:rtype: List[str]
"""
comb =[]
results = []
self.backtracking(digits, comb, results)
return results