回溯算法--LC216.组合总和III

本文介绍了一种使用回溯法解决寻找指定和的非重复数字组合问题的算法。在类Solution中定义了combinationSum3方法,通过递归的backtracking辅助函数实现。算法首先检查当前路径的和是否超过目标值,然后判断是否达到组合的长度和数值和,最后遍历剩余可能的数字并继续回溯。这种方法展示了如何在编程中应用回溯策略来解决组合问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在这里插入图片描述
数字选取[1-9]
不重复

这个题类似于LC77.组合,组合的问题是非重复的,这个题也是非重复的,这个题只是多了个求和。

class Solution(object):
    def combinationSum3(self, k, n):
        """
        :type k: int
        :type n: int
        :rtype: List[List[int]]
        """
        # 回溯法
        result = list()
        self.backtracking(k, n, result, 1, [])
        return result
        
    def backtracking(self, k, n, result, start, path):
        # 剪枝
        if sum(path) > n:
            return 
        # 终止条件
        if len(path) == k and sum(path) == n: 
            result.append(path[:])
            return 
        for i in range(start, 10):
            path.append(i)
            self.backtracking(k, n, result, i+1, path)
            path.pop()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值