代码随想录算法训练营第24天|77. 组合

该文章主要讲解了LeetCode上的77题——组合问题,通过回溯算法进行求解。作者详细介绍了如何设置路径(path)和结果(res),以及回溯函数(backtracking)的实现,包括基本条件判断、for循环中的剪枝操作和递归过程。在回溯过程中,当路径长度等于目标k时,将路径添加到结果中,否则在循环中尝试所有可能,并在递归返回时执行路径回溯。
摘要由CSDN通过智能技术生成

77. 组合 

题目链接:LeetCode - The World's Leading Online Programming Learning Platform

题目链接/文章讲解:代码随想录

视频讲解:带你学透回溯算法-组合问题(对应力扣题目:77.组合)| 回溯法精讲!_哔哩哔哩_bilibili

剪枝操作:带你学透回溯算法-组合问题的剪枝操作(对应力扣题目:77.组合)| 回溯法精讲!_哔哩哔哩_bilibili

解题思路:

采用回溯

设置一个stack path 和一个结果res

定义回溯(n,k,start_index 传入start_index的原因是在回溯时我们需要知道他应该从哪一个起始值进行递归),首先设置basic condition 如果path长度为k时,把path放进res。 如果不合符条件的话 就进入回溯中的for loop,从start_index到n-1(注意我们可以做减枝操作)循环,将当前i append进path,做回溯递归,注意此时start_index是i+1,是从我们当前i的后一位递归。当递归到底返回后 要注意回溯 也就是pop我们的path。

最后执行我们的function并return我们res

class Solution(object):
    def combine(self, n, k):
        """
        :type n: int
        :type k: int
        :rtype: List[List[int]]
        """
        path=[]
        res=[]
        def backtracking(n,k,start_index):
            if len(path) == k:
                res.append(path[:])
                return
            for i in range(start_index,n-(k-len(path))+2):
                path.append(i)
                backtracking(n,k,i+1)
                path.pop()
        backtracking(n,k,1)
        return res

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值