题目描述:
给定两个整数 n 和 k,返回 1 ... n 中所有可能的 k 个数的组合。
示例:
输入: n = 4, k = 2
输出:
[
[2,4],
[3,4],
[2,3],
[1,2],
[1,3],
[1,4],
]
思路:
递归:f(n, k)有两部分构成
1. f(n-1,k)
2. f(n-1, k-1)中的每个结果加上[n]的返回值
base case为:
1. n < k,返回None
2.k = n,返回[[range(n)]]
3.k = 1,返回[[1],[2],...[n]]
代码:
class Solution:
def combine(self, n, k):
"""
:type n: int
:type k: int
:rtype: List[List[int]]
"""
if n < k:
return None
if n == k:
return [list(range(1, n + 1))]
if k == 1:
return list(map(lambda x: [x], list(range(1, n + 1))))
res1 = self.combine(n-1, k)
res2 = self.combine(n-1, k-1)
for i, l in enumerate(res2):
res2[i] = l + [n]
return res1 + res2