题目
力扣 77题:组合
给定两个整数 n 和 k,返回范围 [1, n] 中所有可能的 k 个数的组合。你可以按 任何顺序 返回答案。
代码
def backtrack(n, k, startIndex):
if len(path) == k:
result.append(path[:])
return
for i in range(startIndex, n+1):
path.append(i)
backtrack(n, k, i+1)
path.pop()
result = []
path = []
backtrack(4, 2, 1)
print(result)
# [[1, 2], [1, 3], [1, 4], [2, 3], [2, 4], [3, 4]]
剪枝
def backtrack(n, k, startIndex):
if len(path) == k:
result.append(path[:])
return
for i in range(startIndex, n-(k-len(path))+2):
path.append(i)
backtrack(n, k, i+1)
path.pop()
result = []
path = []
backtrack(4, 2, 1)
print(result)
# [[1, 2], [1, 3], [1, 4], [2, 3], [2, 4], [3, 4]]
回溯算法可以解决的问题
- 组合/切割/子集/排列/棋盘