77.组合
给定两个整数 n
和 k
,返回范围 [1, n]
中所有可能的 k
个数的组合。
你可以按 任何顺序 返回答案。
# 思路一
class Solution:
def combine(self, n: int, k: int) -> List[List[int]]:
res = []
self.backtracking(n, k, 1, [], res)
return res
def backtracking(self, n, k, startindex, curpath, res):
if len(curpath) == k:
res.append(curpath[:])
return
for i in range(startindex, n+1):
curpath.append(i)
self.backtracking(n, k, i+1, curpath, res)
curpath.pop()
# 思路二,剪枝
class Solution:
def combine(self, n: int, k: int) -> List[List[int]]:
res = []
self.backtracking(n, k, 1, [], res)
return res
def backtracking(self, n, k, startindex, curpath, res):
if len(curpath) == k:
res.append(curpath[:])
return
# n-i+1 >= k-len(curpath)
# i <= n-(k-len(curpath))+1
# 因为左闭右开,所以还要再加1
for i in range(startindex, n-(k-len(curpath))+2):
curpath.append(i)
self.backtracking(n, k, i+1, curpath, res)
curpath.pop()