[Leetcode] - 77


  • コンビネーション/シーケンスitertoolsを使用して
  • を生成
  • idxを選択すると、次の再帰では、重複する数
  • を回避するには、idx+1から重複文を迂回する必要がある.

    itertools

    import itertools
    class Solution:
        def combine(self, n: int, k: int) -> List[List[int]]:
            
            return list(itertools.combinations(range(1, n+1), k))
    

    dfs

    
    class Solution:
        def combine(self, n: int, k: int) -> List[List[int]]:
            
            results = []
            def dfs(elements, start, k):
                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()
                
                return
            
            dfs([], 1, k)
            
            return results