動機

用for去merge list比用sum([...],[])快,但好多行

Problem

Given two integers n and k, return all possible combinations of k numbers out of the range [1, n].

You may return the answer in any order.

 

Example 1:

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

Example 2:

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

 

Constraints:

  • 1 <= n <= 20
  • 1 <= k <= n

Sol

class Solution:
    def combine(self, n: int, k: int) -> List[List[int]]:
        def dfs(ss,k,acc=[]):
            if k == 0:
                return [acc]
            else:
                return sum([dfs(ss[i+1:],k-1,acc+[n]) for (i,n) in enumerate(ss)], [])
        return dfs(list(range(1,n+1)), k)