491. Non-decreasing Subsequences

https://leetcode.com/problems/non-decreasing-subsequences/arrow-up-right

solution

class Solution:
    def findSubsequences(self, nums: List[int]) -> List[List[int]]:
        path = []
        res = []
        self.dfs(nums, path, res, start=0)
        return res

    def dfs(self, nums, path, res, start):
        if len(path) > 1:
            res.append(path[:])

        used = set()  # 记录本层元素是否重复使用,新一层used都会被清空。因此进来之后才刚刚定义,所以不需要最后回溯时处理
        for i in range(start, len(nums)):
            if nums[i] in used:
                continue
            if path and nums[i] < path[-1]:
                continue

            used.add(nums[i])
            path.append(nums[i])
            self.dfs(nums, path, res, i+1)
            path.pop()

时间复杂度:O(n⋅2^n) 空间复杂度:O(2^n)

Last updated