LeetCode:78子集

java 复制代码
class Solution {
    //盛放最终所有子集
    List<List<Integer>> res = new ArrayList<>();
    //盛放单个集合
    List<Integer> path = new ArrayList<>();

    public List<List<Integer>> subsets(int[] nums) {
        backtrack(nums,0);
        return res;
    }

    private void backtrack(int[] nums, int startIndex){
        res.add(new ArrayList<>(path));

        //从startIndex开始
        for(int i = startIndex; i < nums.length; i++){
            path.add(nums[i]);
            //递归
            backtrack(nums, i + 1);

            path.remove(path.size() - 1);
        }
    }
}

子集回溯递归树:

这个递归函数中没有return,靠for循环里面的下标跳出循环。

可与上题全排列对比理解回溯算法。

相关推荐
垆边人似月.4 分钟前
华为机试题 :有效的括号
c++·算法·华为
A加ITIL教练长河achotsao39 分钟前
ITIL Master 战略领导者课后系列分享:AI编程正在重新划分研发与运维的边界
算法
hahaha601641 分钟前
FPGA+ARM实现AWB的全流程
人工智能·嵌入式硬件·算法·计算机视觉·fpga开发
李洱41 分钟前
LangChain 和 LangGraph 的区别:核心原理与使用场景
算法
夏幻灵44 分钟前
每日一题:LeetCode 206:反转链表——三指针与原地反转详解
算法·leetcode·链表
CQU_JIAKE1 小时前
10.9【A】
数据结构
第25小时记录1 小时前
数据结构与算法 -第 3 章 常用算法-动态规划
数据结构·python
岁月蹉跎的一杯酒1 小时前
CCM-可调颜色校正与噪声权衡
图像处理·算法·isp
在所不辞兄2 小时前
选择隐式方法求解刚性ODE
算法