Leetcode Tag Search | Back

77. Combinations (M)

Category: /leetcode

Leetcode Link | Backtrack template

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 = 2
Output:
[
  [2,4],
  [3,4],
  [2,3],
  [1,2],
  [1,3],
  [1,4],
]
Example 2:

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

Constraints:

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

Solution

  • Backtrack 模板解法 T: O(2^N), S: O(N)
def combine(n, k):
  if n <= 0 or k <=0: return []

  def backtrack(n, k, start, track):
    if k == len(track):
      res.append(track)
      return

    for i in range(start, n + 1):
      track.append(i)  # make choice
      backtrack(n, k, i+1, track)
      track.pop()  # undo choice

  res = []
  track = []
  backtrack(n, k, 1, track)
  return res


run simulation: 
res: 
[[1, 2]]
[[1, 2], [1, 3]]
[[1, 2], [1, 3], [1, 4]]
[[1, 2], [1, 3], [1, 4], [2, 3]]
[[1, 2], [1, 3], [1, 4], [2, 3], [2, 4]]
[[1, 2], [1, 3], [1, 4], [2, 3], [2, 4], [3, 4]]

讨论

提示

  • 如果看不到讨论部分, 请暂时关掉adblock in Firefox/Chrome
  • 本网站使用Javascript实现评论功能, 此处外链对提高您的网站PR没有帮助. (潜台词: 请不要灌水, 谢谢)