Leetcode - 77. Combinations

문제

  • https://leetcode.com/problems/combinations/

풀이

class Solution:
    def combine(self, n: int, k: int) -> List[List[int]]:
        def comb(a, b):
            if b == 1:
                return [[a]]

            res = []
            for i in range(a + 1, n + 1):
                for com in comb(i, b - 1):
                    res.append([a] + com)
            return res
        
        combs = []
        for i in range(1, n + 1):
            combs += comb(i, k)

        return combs

DFS로 조합을 구현했다.

책의 풀이

from typing import List


class Solution:
    def combine(self, n: int, k: int) -> List[List[int]]:
        results = []

        def dfs(elements, start: int, k: int):
            if k == 0:
                results.append(elements[:])
                return

            # 자신 이전의 모든 값을 고정하여 재귀 호출
            for i in range(start, n + 1):
                elements.append(i)
                dfs(elements, i + 1, k - 1)
                elements.pop()

        dfs([], 1, k)
        return results