文章目录
题目
给定两个整数 n 和 k,返回范围 [1, n] 中所有可能的 k 个数的组合。
你可以按 任何顺序 返回答案。
示例 1:
输入:n = 4, k = 2
输出:
\[2,4\], \[3,4\], \[2,3\], \[1,2\], \[1,3\], \[1,4\],
示例 2:
输入:n = 1, k = 1
输出:[[1]]
题解
1. 回溯
python
class Solution(object):
def combine(self, n, k):
"""
:type n: int
:type k: int
:rtype: List[List[int]]
"""
result = []
path = []
start = 1
def backtracking(n, k, path, start, result):
if len(path) == k:
result.append(path[:])
return
for i in range(start, n + 1):
path.append(i)
backtracking(n, k, path, i + 1, result)
path.pop()
if n == 1:
return [[1]]
backtracking(n, k, path, start, result)
return result
2. 剪枝优化
python
n + 1 - (k - len(path)) + 1
python
class Solution(object):
def combine(self, n, k):
"""
:type n: int
:type k: int
:rtype: List[List[int]]
"""
result = []
path = []
start = 1
def backtracking(n, k, path, start, result):
if len(path) == k:
result.append(path[:])
return
for i in range(start, n + 1 - (k - len(path)) + 1):
path.append(i)
backtracking(n, k, path, i + 1, result)
path.pop()
if n == 1:
return [[1]]
backtracking(n, k, path, start, result)
return result