216.组合总和III
class Solution(object):
def combinationSum3(self, k, n):
result = []
self.backtracking(k, n, 0, 1, [], result)
return result
def backtracking(self, k, n, current_sum, start_index, path, result):
if current_sum > n: #剪枝
return
if len(path) == k:
if current_sum == n:
result.append(path[:])
return
for i in range(start_index, n-(k-len(path))+2):
current_sum += i
path.append(i)
self.backtracking(k, n, current_sum, i+1, path, result)
path.pop()
current_sum -= i
【思考】 剪枝这一步很重要,是一个有效剪枝,比如n=4,k=3,当进行到1+2+3=6>4时,剪枝成功,不会再继续向下进行无效递归,会直接回到上一层开始探索1+3+。。。的组合。