根据在算法-动态规划2里提到的思路,让我们来解决一个组合问题 :leetcode 第77题。
0 问题描述
给定2个整数n,k,求出从[1,…,n]中取k个数字的所有组合。
例如 n=4, k=2
就是从[1,2,3,4]中取2个数字的所有组合。
结果为:[[1, 2], [1, 3], [2, 3], [1, 4], [2, 4], [3, 4]]
1 递归解法
(1)假设组合中不包含 第n个数字,原问题就变为:
求出从[1,…,n-1] 中取k个数字的所有组合。
(2)假设组合中包含 第n个数字,原问题就变成了:
求出从[1,…,n-1]中取 k-1 个数字的组合,然后中每个组合中,把第n个数字加进去。
(1)+ (2)就是问题的解。
import copy
class Solution:
def combine(self, n, k):
return self.combine_core(n, k)
def combine_core(self, n, k):
if n <= 0 or k <= 0:
return list()
if k == 1:
return [[i] for i in range(1, n + 1)]
# 第(1)种情况
res1 = self.combine_core(n - 1, k)
# 第(2)种情况
res2 = self.combine_core(n -