给定两个整数 n 和 k,返回 1 ... n 中所有可能的 k 个数的组合。
示例:
输入: n = 4, k = 2
输出:
[
[2,4],
[3,4],
[2,3],
[1,2],
[1,3],
[1,4],
]
第一种思路:
调库。
class Solution(object):
def combine(self, n, k):
"""
:type n: int
:type k: int
:rtype: List[List[int]]
"""
import itertools
return list(itertools.combinations(range(1,n+1),k))
第二种思路:
回溯。一般问组合的都是回溯。
class Solution(object):
def combine(self, n, k):
"""
:type n: int
:type k: int
:rtype: List[List[int]]
"""
res = []
def generate(k, i, tmp):
if k == 0:
res.append(tmp[:])
return
for j in range(i , n + 1):
tmp.append(j)
generate(k - 1, j + 1, tmp)
tmp.pop()
generate(k, 1, [])
return res
以下写于2019.6.18
class Solution(object):
def combine(self, n, k):
"""
:type n: int
:type k: int
:rtype: List[List[int]]
"""
res = []
def dfs(t, cnt, tmp):
if cnt == 0:
res.append(tmp[:])
for i in range(t + 1, n + 1):
dfs(i, cnt - 1, tmp + [i])
dfs(0, k, [])
return res