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
# char dfs (type 2 linear) Leetcode 77 Given two integers n and k, return all possible combinations of k numbers out of the range [1, n]
def combine(self, n: int, k: int) -> List[List[int]]:
nums = [i + 1 for i in range(n)]
path, res = [], []
self.dfs2(nums, 0, k, [], res)
return res

def dfs2(self, nums, start, k, path, res):
if len(path) == k:
res.append(list(path))
return
for i in range(start, len(nums)):
path.append(nums[i])
self.dfs2(nums, i + 1, k, path, res)
path.pop()

算法分析:

时间复杂度为O(kCkn),解大小乘以path长度, 空间复杂度O(n)

Free mock interview