回溯算法--LC491.递增子序列

该博客介绍了一个Python类方法,用于找到一个整数列表的自增子序列。算法采用深度优先搜索(DFS)策略,保持子序列的顺序,并通过设置used集合避免重复元素。方法首先初始化结果列表和路径列表,然后进行回溯搜索,记录每一步的选择并生成所有可能的自增子序列。

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

在这里插入图片描述

class Solution(object):
    def findSubsequences(self, nums):
        """
        :type nums: List[int]
        :rtype: List[List[int]]
        """
        # 本题求自增子序列,所以不能改变原数组顺序
        res = []
        path = []
        def backsum(nums,start):
            if len(path) >= 2 :
                res.append(path[:])
            if start>= len(nums):
                return
            # 深度遍历中每一层都会有一个全新的usage_list用于记录本层元素是否重复使用
            used = set() #记录本层元素是否使用
            for i in range(start,len(nums)):
                if path and nums[i] < path[-1] or nums[i] in used:
                    continue
                used.add(nums[i])
                path.append(nums[i])
                backsum(nums,i+1)
                path.pop()

        backsum(nums,0)
        return res
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值