递归、搜索与回溯-穷举vs暴搜vs深搜vs回溯vs剪枝:13.子集

题目链接:78. 子集(中等)

算法原理:

解法:递归

Java代码:

java 复制代码
/**
 * Created with IntelliJ IDEA.
 * Description:
 * User: 王洋
 * Date: 2025-09-25
 * Time: 00:06
 */
class Solution {
    //自己按着解法二写的,一遍通过
    List<List<Integer>> ret;
    List<Integer> path;
    public List<List<Integer>> subsets(int[] nums) {
        ret=new ArrayList<>();
        path=new ArrayList<>();
        dfs(nums,0);
        return ret;
    }
    public void dfs(int[] nums,int pos){
        ret.add(new ArrayList<>(path));
        for(int i=pos;i<nums.length;i++){
            path.add(nums[pos++]);
            dfs(nums,pos);
            //回溯
            path.remove(path.size()-1);
        }
        return ;
    }
    //看吴小哲敲完后写的,注释处是自己写的解法一,但失败了
    List<List<Integer>> ret;
    List<Integer> path;
    public List<List<Integer>> subsets(int[] nums) {
        ret=new ArrayList<>();
        path=new ArrayList<>();
        dfs(nums,0);
        return ret;
    }
    public void dfs(int[] nums,int pos){
        if(pos==nums.length){ ret.add(new ArrayList<>(path));return;}
        //选
        path.add(nums[pos]);
        dfs(nums,pos+1);
        path.remove(path.size()-1);//回溯->恢复原状
        //不选
        dfs(nums,pos+1);
    }
    //public void dfs(int[] nums,int i){
    //    if(i==nums.length) {ret.add(new ArrayList<>(path));path.add(i);}
    //    for(;i<nums.length;i++) dfs(nums,i);
    //    return;
    //};
}
相关推荐
Seven9726 分钟前
剑指offer-80、⼆叉树中和为某⼀值的路径(二)
java
董董灿是个攻城狮10 小时前
AI视觉连载8:传统 CV 之边缘检测
算法
怒放吧德德12 小时前
Netty 4.2 入门指南:从概念到第一个程序
java·后端·netty
雨中飘荡的记忆13 小时前
大流量下库存扣减的数据库瓶颈:Redis分片缓存解决方案
java·redis·后端
小黎147577898536416 小时前
OpenClaw 连接飞书完整指南:插件安装、配置与踩坑记录
机器学习
心之语歌16 小时前
基于注解+拦截器的API动态路由实现方案
java·后端
华仔啊17 小时前
Stream 代码越写越难看?JDFrame 让 Java 逻辑回归优雅
java·后端
ray_liang17 小时前
用六边形架构与整洁架构对比是伪命题?
java·架构
AI软著研究员17 小时前
程序员必看:软著不是“面子工程”,是代码的“法律保险”
算法
FunnySaltyFish18 小时前
什么?Compose 把 GapBuffer 换成了 LinkBuffer?
算法·kotlin·android jetpack