组合问题77

题目:给定两个整数 nk,返回 1 … n 中所有可能的 k 个数的组合。

输入: n = 4, k = 2

输出:[ [2,4], [3,4], [2,3], [1,2], [1,3], [1,4],]

思路:对于data中的每个值,递归求出f(data.pop(i),k-1), 也就是说,从[1,2,3,4]中选2个数,相当于在[2,3,4]中选1个数,依次类推

代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
class :
def helper(self, nums, k):
n = len(nums)

if n < k:
return []
if n == k:
return [nums]
if k == 1:
return [[i] for i in nums]
res = []
# 递归过程
for i in range(n):
start = [nums[i]]
# 相当于在i之后的nums中选取k-1个数
sub_res = [start + s for s in self.helper(nums[i + 1:], k - 1)]
res.extend(sub_res)
return res
# n中选k个
def combine(self, n, k):
# 上一个函数参数为nums
nums = [i + 1 for i in range(n)]
res = self.helper(nums, k)
return res


a = [1, 2, 3, 4, 5]
print(Solution().combine(5, 3))