今天开始学回溯,二叉树还没搞懂,回溯更难了。没办法,硬着头皮抄吧,希望“抄码过万行,按键如有神”
77.组合
def combine(self, n: int, k: int) -> List[List[int]]:
①可以用库函数combinations,虽然ac,但应该算cheating
return combinations(range(1,n+1),k)
'''
②回溯算法
#逻辑有点一知半解,但实现起来好复杂
ans = []
def backtracking(start,temp):
if len(temp) == k:
ans.append(temp[:]) # 符合条件,将组合添加到结果
return
for i in range(start,n+1):
if (n+1-start+len(temp))<k:# 当前所能组成的最大长度组合已经小于K时,则直接return,不符合要求
return
temp.append(i)
backtracking(i+1,temp)
temp.pop()
backtracking(1,[])
return ans