回溯算法模板
def backtracking(): if(终止条件): 存放结果 return: for(选择): 处理节点 backtracking() 回溯,撤销处理结果
77. 组合
题目简述:
给定两个整数 n
和 k
,返回范围 [1, n]
中所有可能的 k
个数的组合。
你可以按 任何顺序 返回答案。
思路
回溯法
class Solution: def combine(self, n: int, k: int) -> List[List[int]]: list=[] def backtrack(begin,end,len,res): if len==k: # 这里这样构造才能保证不随着res变化,直接append是浅拷贝 list.append([j for j in res]) return for i in range(begin,end): res.append(i) len+=1 backtrack(i+1,end,len,res) len-=1 res.pop() backtrack(1,n+1,0,[]) return list
总结
1. 回溯法和递归差不多,但是需要撤销一些原条件
2. 注意python中的浅拷贝和深拷贝