题目描述
给定两个整数 n 和 k,返回 1 … n 中所有可能的 k 个数的组合。
示例:
输入: n = 4, k = 2
输出:
1 2 3 4 5 6 7 8
| [ [2,4], [3,4], [2,3], [1,2], [1,3], [1,4], ]
|
递归
从 n 个当中选 k 个的所有方案对应的枚举是组合型枚举。思路很简单,针对 1 … n 中的每个数,在组合的结果中,我们都有两种结果,选择或者不选择。于是我们从第一个数开始进行递归的判断。详细分析在代码注释中。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
| List<List<Integer>> ans = new ArrayList<>(); LinkedList<Integer> item = new LinkedList<>();
public List<List<Integer>> combine(int n, int k) { dfsCombine(n, k, 1); return ans; }
public void dfsCombine(int n, int k, int index) { if (item.size() == k) { ans.add(new ArrayList<>(item)); return; }
if (item.size() + n - index + 1 < k) { return; } item.add(index); dfsCombine(n, k, index + 1); item.removeLast(); dfsCombine(n, k, index + 1); }
|
来源
组合 | 力扣(LeetCode)
组合 | 题解(LeetCode)
文章标题:组合
文章作者:cylong
文章链接:https://0skyu.cn/p/ada6.html
有问题或者建议欢迎在下方评论。欢迎转载、引用,但希望标明出处,感激不尽(●’◡’●)