day24| 77. 组合

发布时间 2023-04-07 21:13:09作者: blueCP1999

回溯算法模板

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中的浅拷贝和深拷贝