给定两个整数 n 和 k,返回 1 … n 中所有可能的 k 个数的组合。
示例:
输入: n = 4, k = 2
输出:
[
[2,4],
[3,4],
[2,3],
[1,2],
[1,3],
[1,4],
]
#最直观的思路
class Solution:
def combine(self, n: int, k: int) -> List[List[int]]:
res = []
path = []
num = n - k
def backtrack(n, k, index):
if len(path) == k:
res.append(path[:])
return
for i in range(index, n+1):
if k - len(path) > n - i + 1: #剪枝优化
break
path.append(i)
backtrack(n, k, i + 1)
path.pop()
backtrack(n, k, 1)
return res
# nums = [i for i in range(1, n + 1)]
# res = []
# for tmp in itertools.combinations(nums, k):
# res.append(tmp)
# return res