491. 非递减子序列 - 力扣(LeetCode)
思路:重点是去重
收集结果:每次进入递归先判断path中的元素数量,如果大于1了,就将path收集到result中。
递归参数:nums,index,path
递归出口:当遍历完nums时return
单层递归逻辑:(使用集合来去重)定义一个uset来记录已经遍历过的元素。
- i从index遍历到nums结束:如果当前元素已经遍历过了,continue;如果当前元素比path中最后一个元素小,不符合非递减,continue。
- 将当前元素加入path数组中和uset集合中,调用递归函数,pop出path的最后一个元素。

class Solution(object):
    def back(self,nums,index,path):
        if len(path)>=2:
            self.result.append(path[:])
        if nums==len(nums):
            return
        uset=set()
        for i in range(index,len(nums)):
            if nums[i] in uset:
                continue
            if len(path)!=0 and nums[i]<path[-1]:
                continue
            path.append(nums[i])
            uset.add(nums[i])
            self.back(nums,i+1,path)
            path.pop()
    def findSubsequences(self, nums):
        self.result=[]
        self.back(nums,0,[])
        return self.result


















