题目链接
英文链接:https://leetcode.com/problems/combinations/
中文链接:https://leetcode-cn.com/problems/combinations/
题目详述
给定两个整数 n 和 k,返回 1 … n 中所有可能的 k 个数的组合。
示例:
1 | 输入: n = 4, k = 2 |
题目详解
DFS,回溯。
- 每次尝试添加当前元素,然后当前元素加上 1 进入下一层。
- 递归的终止条件是已经添加了 k 个数,将这 k 个数加入结果集。
1 | public class LeetCode_00077 { |
- 由于最终的
list.size()
要等于k
,达不到要求可以进行剪枝优化。 - 即
n - i + 1 >= k - list.size()
,i <= n - (k - list.size()) + 1
,可以优化循环条件进行剪枝。
1 | public class LeetCode_00077 { |
也可以新建一个大小为 k 的数组,直接模拟出每个可能的组合。
1 | public class LeetCode_00077 { |