【回溯算法】LCR 080. 组合

LCR 080. 组合

解题思路

  • 初始化一个空的列表 res 来存储所有满足条件的组合,以及一个空的列表 track 来跟踪当前正在构建的组合。

  • 定义一个名为 combine 的方法,该方法接受两个参数 n 和 k,分别表示范围和组合的长度。

  • 在 combine 方法内部,首先生成一个长度为 n 的整数数组 nums,其中每个元素的值从 1 到 n。

  • 调用 backtrack 方法开始生成组合。

  • 在 backtrack 方法中,首先检查当前 track 列表的大小是否等于目标长度 k,如果是,则将当前组合添加到 res 中。

  • 遍历从 start 开始到数组末尾的所有元素,表示在当前位置做出选择。

  • 将选择的元素添加到 track 中,并递归调用 backtrack 方法,传递相同的目标长度 k,但起始位置更新为 i + 1,以确保不会重复选择相同的元素。

  • 当递归调用返回后,撤销上一步的选择,即从 track 中移除最后一个元素,以便尝试下一个可能的选择。

  • 当遍历完成时,所有满足条件的组合都已经生成,最后将 res 返回作为结果

java 复制代码
class Solution {
    List<Integer> track = new LinkedList<>();
    List<List<Integer>> res = new LinkedList<>();

    public List<List<Integer>> combine(int n, int k) {
        int[] nums = new int[n];
        for(int i = 0; i < n; i++){
            nums[i] = i + 1;
        }

        backtrack(nums,k,0);
        return res;
    }

    void backtrack(int[] nums,int k,int start){
        // 控制收集大小为k的子集
        if(track.size() == k){
            res.add(new LinkedList<>(track));
        }

        for(int i = start; i < nums.length; i++){
            // 做出选择
            track.addLast(nums[i]);

            // 回溯下一层
            backtrack(nums,k,i + 1);

            // 撤销选择
            track.removeLast();
        }
    }
}
相关推荐
总裁余(余登武)1 小时前
K-means算法改进(Python版)
python·算法·kmeans
灯澜忆梦1 小时前
【面向对象编程c++】| 指针与自定义数据类型
开发语言·c++·算法
xxwl5852 小时前
区域赛算法模版第八章---贪心(Greedy)
c++·笔记·学习·算法
CCblandy2 小时前
向量检索 ANN 参数实测:换一种数据分布,recall 掉了 51 个百分点
人工智能·python·算法·自然语言处理·性能优化
CS创新实验室2 小时前
一棵树怎么做到“自平衡还不太费力“?——红黑树的旋转与染色
数据结构·算法·红黑树·408·计算机考研
Logic1012 小时前
C语言/数据结构位运算题解:异或XOR找出被挑选一次的果子编号——只出现一次的数字
c语言·数据结构·算法·数组·位运算·时间复杂度·空间复杂度
深圳市快瞳科技有限公司3 小时前
面向端侧部署的多帧宠物身份识别:完整性评分机制与工程约束
人工智能·算法·计算机视觉·端侧ai·宠物识别·宠物ai·宠物身份识别
从小白到软工4 小时前
4-3 项目-学生成绩管理系统(上)
c语言·开发语言·数据结构·经验分享·ai编程
悠仁さん4 小时前
非类型模板参数的特化与偏特化
java·数据结构·算法
垆边人似月.4 小时前
最优河堤加固(二分答案 + 前缀和)
算法