Leetcode: Combinations

less than 1 minute read

Problem Description

Problem definition is taken from leetcode.

Given two integers n and k, return all possible combinations of k numbers out of 1 … n. You may return the answer in any order.

Example 1

Input: n = 4, k = 2
Output:
[
  [2,4],
  [3,4],
  [2,3],
  [1,2],
  [1,3],
  [1,4],
]

Example 2

Input: n = 1, k = 1
Output: [[1]]

Solution 1

Recursively create combinations. Time complexity is O(n^k). Space complexity is O(k).

class Solution:
    def combine(self, n: int, k: int) -> List[List[int]]:
        combinations = []
        
        self.populate(combinations, n, [], 0, k)
        
        return combinations
        
        
    def populate(self, combinations, N, comb, idx, k):
        if k==0: 
            combinations.append(comb)
            return
        
        for i in range(idx, N):
            self.populate(combinations, N, comb+[i+1], i+1, k-1)