【leetcode】77.组合
文章目录
- 题目
- 题解
- 1. 回溯
- 2. 剪枝优化
题目
77.组合
给定两个整数 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. 回溯
class Solution(object):def combine(self, n, k):""":type n: int:type k: int:rtype: List[List[int]]"""result = []path = []start = 1def 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. 剪枝优化
n + 1 - (k - len(path)) + 1
class Solution(object):def combine(self, n, k):""":type n: int:type k: int:rtype: List[List[int]]"""result = []path = []start = 1def 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