KK's blog

每天积累多一些

0%

LeetCode 077 Combinations

LeetCode



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

题目大意:

求大小为k的所有可能组合

解题思路:

用组合模板,先排序

解题步骤:

N/A

注意事项:

  1. 引入k作为模板API中的target,k为0作为终止条件

Python代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
def combine(self, n: int, k: int) -> List[List[int]]:
nums = [_ for _ in range(1, n + 1)]
path, result = [], []
self.dfs(nums, 0, k, path, result)
return result

def dfs(self, nums, st, k, path, result):
if k == 0:
result.append(list(path))
return

for i in range(st, len(nums)):
path.append(nums[i])
self.dfs(nums, i + 1, k - 1, path, result)
path.pop()

算法分析:

时间复杂度为O(2k),空间复杂度O(n)

Free mock interview