-----持续更新Spring入门系列文章-----
如果你也喜欢Java和算法,欢迎订阅专栏共同学习交流!
你的点赞、关注、评论、是我创作的动力!
-------希望我的文章对你有所帮助--------
专栏:蓝桥杯系列
一、题目描述
给定两个整数 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、本题的套路相对于从一堆数中,按一定个数选择不同组数据,当k值小时的确使用常规暴力方法可以完成,但是k值过大,我们则不可能写个几十层循环来完成吧?
2、因此采用回溯算法,即循环和递归结合的方法。其实本题类似于树形结构,循环负责横向遍历,递归则是纵向遍历!
三、代码实现
class Solution {
LinkedList<Integer>path=new LinkedList<>();//保存子集
List<List<Integer>> result=new ArrayList<>();//结果集
public List<List<Integer>> combine(int n, int k) {
combineHelper(n,k,1);
return result;
}
public void combineHelper(int n,int k,int start)
{
if (k==path.size()) {
result.add(new ArrayList<>(path));//满足个数,加入结果集
return;
}
for (int i=start;i<=n-(k- path.size())+1;i++)
{
path.add(i);//加入子集
combineHelper(n,k,i+1);
path.removeLast();
}
}
}
发文不易,恳请大佬们高抬贵手!
点赞:随手点赞是种美德,是大佬们对于本人创作的认可!
评论:往来无白丁,是你我交流的的开始!
收藏:愿君多采撷,是大佬们对在下的赞赏!