穷举vs暴搜vs深搜vs回溯vs剪枝专题一>子集

题目:


两个方法本质就是决策树的画法不同

方法一解析:


代码:

java 复制代码
class Solution {
    private List<List<Integer>> ret;//返回结果
    private List<Integer> path;//记录路径,注意返回现场
    public List<List<Integer>> subsets(int[] nums) {
        path = new ArrayList<>();
        ret = new ArrayList<>();
        dfs(nums,0);
        return ret;
    }


    //i表示选择到了那一层
    private void dfs(int[] nums, int indx){
        //递归出口
        if(indx == nums.length){
            ret.add(new ArrayList<>(path));
            return;
        }

        //选某个元素
        path.add(nums[indx]);
        dfs(nums,indx+1);
        path.remove(path.size()-1);//回复现场


        //不选某个元素
        dfs(nums,indx+1);
    }
}

方法二解析:


代码:

java 复制代码
 private List<List<Integer>> ret;//返回结果
    private List<Integer> path;//记录路径
    public List<List<Integer>> subsets(int[] nums) {
        path = new ArrayList<>();
        ret = new ArrayList<>();
        dfs(nums,0);
        return ret;
    }

    private void dfs(int[] nums, int pos){
        ret.add(new ArrayList<>(path));
        for(int i = pos; i < nums.length; i++){
            path.add(nums[i]);
            //每一层只能往选过的元素,再往选
            dfs(nums,i+1);
            path.remove(path.size()-1);//回复现场
        }
    }
相关推荐
yyy(十一月限定版)23 分钟前
数电1对应latex代码
算法
jieyucx23 分钟前
Go语言切片:动态灵活的数据序列
算法·golang·指针·顺序表·数组·结构体·切片
我头发多我先学24 分钟前
C++ 红黑树:从规则到实现,手把手带你写一棵红黑树
数据结构·c++·算法
nlpming37 分钟前
opencode SQLite 数据库结构与查询手册
算法
Cando学算法41 分钟前
中位数定理:到所有点的距离之和最小的点就是中位数
c++·算法·学习方法
nlpming42 分钟前
opencode 上下文压缩(Compaction)机制
算法
anew___1 小时前
算法刷题避坑指南:从数据规模到易错点的实战总结
算法
HZY1618yzh1 小时前
洛谷题解:P16304 [蓝桥杯 2026 省 Java C 组] 抽奖活动
java·c++·算法·蓝桥杯
智者知已应修善业1 小时前
【51单片机从奇数始再转偶数逐一点亮并循环】2023-9-8
c++·经验分享·笔记·算法·51单片机
倔强的猴子(翻版)1 小时前
我用 Python 写了个排序库,一亿数据量下比 C 级 np.sort() 快 7 倍
人工智能·python·算法·阿里云·文心一言