组合
组合
1.题目内容
给定两个整数 n 和 k,返回范围 [1, n] 中所有可能的 k 个数的组合。
你可以按 任何顺序 返回答案。
示例 1:
1 | 输入:n = 4, k = 2 |
示例 2:
1 | 输入:n = 1, k = 1 |
提示:
1 <= n <= 201 <= k <= n
2.解法
回溯
思路及算法
n 表示范围为 1…n,balance 表示剩余空间,start 表示开始位置,list 为回溯列表。判断 balance == 0,如果为 0 则代表 list 中已经存入 k 个数,拷贝 list 存入结果 ans 中。如果不为 0,从 start 位置开始递归调用,现将当前位置数据加入 list 中,并进入下一层,等待返回后将本层加入的数据移除,本质就是树的构造过程
其中循环结束条件默认为最大值到 n,这里可以优化进行剪枝,比如 n=4,k=3 时,如果列表从 start=3 也就是 [3] 开始,那么该组合一定不存在,因为至少要 k=3 个数据,所以剪枝临界点为 n-balance+1




代码
1 | //Java |