题目
思路
经典回溯算法,参考代码随想录-组合
代码
代码一 回溯法不剪枝
class Solution(object):
def __init__(self):
self.result = []
self.path = []
def combine(self, n, k):
self.find(n, k, 1)
return self.result
def find(self, n, k, index):
if len(self.path)==k:
# self.result.append(self.path) 注意该错误写法,这里只是引用
self.result.append(self.path[:]) # 注意该正确写法,一维list切片是深拷贝
return 0
for i in range(index, n+1): # 不剪枝
self.path.append(i)
self.find(n, k, i+1) # 递归函数
self.path.pop() # 回溯
代码一 回溯法剪枝
class Solution(object):
def __init__(self):
self.result = []
self.path = []
def combine(self, n, k):
self.find(n, k, 1)
return self.result
def find(self, n, k, index):
if len(self.path)==k:
# self.result.append(self.path) 注意该错误写法,这里只是引用
self.result.append(self.path[:]) # 注意该正确写法,一维list切片是深拷贝
return 0
for i in range(index, n+1-(k-len(self.path))+1): # 剪枝
self.path.append(i)
self.find(n, k, i+1) # 递归函数
self.path.pop() # 回溯