IncreasingSubsequences

Published at 2022-01-02

class Solution:
    def findSubsequences(self, nums: List[int]) -> List[List[int]]:
        answer = []
        size = len(nums)

        def func(selected, nums):
            used = []  # 중복 방지
            if len(nums) == 0:
                return
            for i, n in enumerate(nums):
                if selected[-1] <= n and n not in used:
                    used.append(n)
                    if selected + [n] not in answer:
                        answer.append(selected + [n])  # 정답에 추가
                        func(selected + [n], nums[i + 1:])  # 선택목록에 추가하여 또 ㄱㄱ
            return

        for i in range(size - 1):  # 마지막은 최소2개 될 수 없으니 제외
            func([nums[i]], nums[i + 1:])
        return answer

    # https://leetcode.com/problems/letter-tile-possibilities/
    # 1079. Letter Tile Possibilities
    # 위 문제 응용함