【重点】【DFS】【子集】78.子集

news2024/11/24 6:52:24

题目

法1:DFS

必须掌握的方法!!!
我们也可以用递归来实现子集枚举。
假设我们需要找到一个长度为 nnn 的序列 aaa 的所有子序列,代码框架是这样的:

void dfs(int cur, int n, LinkedList<Integer> tmp) {
    if (cur == n) {
        // 记录答案
        // ...
        return;
    }
    // 考虑选择当前位置
    tmp.add(cur);
    dfs(cur + 1, n, k);
    tmp.removeLast();
    // 考虑不选择当前位置
    dfs(cur + 1, n, k);
}

答案如下:

class Solution {
    public List<List<Integer>> subsets(int[] nums) {
        List<List<Integer>> res = new ArrayList<>();
        if (nums.length == 0) {
            return res;
        }
        LinkedList<Integer> tmp = new LinkedList<>();
        dfs(nums, 0, tmp, res);

        return res;
    }

    public void dfs(int[] nums, int startIndex, LinkedList<Integer> tmp, List<List<Integer>> res) {
        if (startIndex == nums.length) {
            res.add(new ArrayList<>(tmp));
            return;
        }
        
        tmp.add(nums[startIndex]); // 选择当前值进行dfs
        dfs(nums, startIndex + 1, tmp, res);
        tmp.removeLast();          // 不选择当前值进行dfs
        dfs(nums, startIndex + 1, tmp, res);
    }
}

法2:动态规划

简单的dp问题。
在这里插入图片描述

class Solution {
    public List<List<Integer>> subsets(int[] nums) {
        List<List<Integer>> res = new ArrayList<>();
        if (nums.length == 0) {
            return res;
        }
        res.add(new ArrayList<>());
        for (int i = 0; i < nums.length; ++i) {
            int size = res.size();
            for (int k = 0; k < size; ++k) {
                List<Integer> newList = new ArrayList<>(res.get(k));
                newList.add(nums[i]);
                res.add(newList);
            }
        }

        return res;
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1320101.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

HTML5+CSS3小实例:3D发光切换按钮效果

目录 一、运行效果 图片效果 二、项目概述 三、开发环境 四、实现步骤及代码 1.创建空文件夹 2.完成页面内容 3.完成css样式 五、项目总结 六、源码获取 一、运行效果 图片效果 二、项目概述 该项目是一个基于HTML和CSS的动态小猫动画。通过使用CSS样式和动画效果…

开源支付项目,还有强大的聚合支付项目,值得借鉴学习,收藏备用

开源支付项目,还有强大的聚合支付项目,值得借鉴学习,收藏备用 自学编程之道2023-03-18 14:26 移动支付随处可见,以前都是微信、支付宝分别各一个收款码,二维码多了之后就不好管理了,随着支付方式的增多,现在基本上都用聚合支付,多种支付方式,一码搞定。针对支付及聚…

Linux常用网络指令

网络参数设定使用的指令 手动/自动设定与启动/关闭 IP 参数&#xff1a;ifconfig, ifup, ifdown ifconfig ifconfig常用于修改网络配置以及查看网络参数的指令 [rootwww ~]# ifconfig {interface} {up|down} < 观察与启动接口 [rootwww ~]# ifconfig interface {options…

项目管理:产品经理如何保障项目按时完成

一个项目的成功要考虑多方因素&#xff0c;即使经过了精细的策划&#xff0c;但是在项目推进过程中也会遇到各种问题。 产品经理的任务就不仅仅在于完成产品策划&#xff0c;还需要承担项目管理工作&#xff0c;跟进项目进度&#xff0c;必要时还得出面协调、解决冲突&#x…

猜数字小游戏(猜错了会关机推荐让室友帮你玩)

前言 今天来带大家写一个简易的猜数字小游戏&#xff0c;如果连着猜错n次&#xff08;自己设定&#xff09;就会导致电脑关机&#xff0c;还在等什么呢&#xff1f;赶紧学会咯&#xff0c;发给你的室友让他帮你玩吧&#xff01; 正文 随机数的生成 首先我们还要学会如何创建随…

Windows10 如何开机自动启动redis

前言 当我们在Windows 10上使用Redis时&#xff0c;通常希望能够使Redis服务在系统启动时自动启动&#xff0c;以便我们无需手动介入就能够方便地访问和管理数据。在这个过程中&#xff0c;我们将通过下载、安装和配置Redis为Windows服务的方式&#xff0c;使其成为系统的一部分…

python与机器学习4,激活函数

目录 1 激活函数1: 单位阶跃函数 1.1 函数形式 1.2 函数图形 1.3 函数特点 1.4 代码实现这个 单位阶跃函数 2 激活函数2 sigmoid函数 2.1 函数形式 2.2 函数图形 2.3 函数特点 2.3.1 是一个连续函数&#xff0c;且是一个渐变的曲线 2.3.2 是连续区间的[0,1] , 可以…

JVM基础扫盲

什么是JVM JVM是Java设计者用于屏蔽多平台差异&#xff0c;基于操作系统之上的一个"小型虚拟机"&#xff0c;正是因为JVM的存在&#xff0c;使得Java应用程序运行时不需要关注底层操作系统的差异。使得Java程序编译只需编译一次&#xff0c;在任何操作系统都可以以相…

定制 Electron 窗口标题栏

Electron 是一款流行的桌面应用开发框架&#xff0c;基于 Web 技术构建&#xff0c;提供了强大的跨平台能力。在开发过程中&#xff0c;经常需要定制窗口标题栏以创造独特的用户体验。 1. 完全隐藏默认标题栏 有时候&#xff0c;我们希望创建一个自定义的标题栏&#xff0c;完…

光伏收益计算工具:实现可持续能源投资的决策支持

随着全球能源结构的转型&#xff0c;光伏发电作为主要的可再生能源之一&#xff0c;其投资前景日益光明。然而&#xff0c;光伏发电项目的投资决策需要基于准确的收益预测。因此&#xff0c;光伏收益计算工具应运而生&#xff0c;为投资者提供决策支持。 光伏收益计算工具是一种…

护肤品品牌怎么创建百度百科词条?

护肤品品牌创建百度百科词条&#xff0c;需要遵循一定的步骤和原则&#xff0c;同时保证内容的真实性和权威性。以下是伯乐网络传媒给大家分享的详细创建流程和注意事项&#xff1a; 一、准备工作 收集资料&#xff1a;首先&#xff0c;需要收集品牌的详细资料&#xff0c;包括…

【Matlab】如何可视化多项式函数(附完整MATLAB代码)

可视化多项式函数 前言多项式函数MATLAB 对理解多项式函数的帮助 正文思考步骤 代码实现及图像显示对于一元多项式函数对于多元多项式函数 前言 多项式函数 多项式函数是数学中常见的一类函数&#xff0c;它的一般形式可以表示为&#xff1a; [ f ( x ) a n x n a n − 1 x…

基于Python Django的内容管理系统Wagtail CMS部署与公网访问

文章目录 前言1. 安装并运行Wagtail1.1 创建并激活虚拟环境 2. 安装cpolar内网穿透工具3. 实现Wagtail公网访问4. 固定的Wagtail公网地址 前言 Wagtail是一个用Python编写的开源CMS&#xff0c;建立在Django Web框架上。Wagtail 是一个基于 Django 的开源内容管理系统&#xf…

X86汇编语言:从实模式到保护模式(代码+注释)--c10、11(保护模式:32位x86处理器编程架构+进入保护模式)

保护模式&#xff1a;32位x86处理器编程架构 IA-32架构的基本执行环境 寄存器扩展 通用寄存器&#xff08;32&#xff09;&#xff1a;EAX EBX ECX EDX ESI EDI EBP ESP 指令寄存器&#xff08;32&#xff09;&#xff1a;EIP 标志寄存器&#xff08;32&#xff09;&#xff…

PFA试剂瓶本底低PFA取样瓶可采集、储存电子级酸

PFA取样瓶是一种可靠、耐用的用于采集、储存、运输和分析食品、医药、环境和化工等领域样品的容器。相对于传统的取样瓶材料如玻璃或塑料&#xff0c;PFA取样瓶拥有多种优点&#xff0c;使其成为当前许多行业的首选。 首先&#xff0c;PFA取样瓶的材质是聚四氟乙烯共聚物&#…

解读远程工作设计师之未来与发展

引言 在数字化的浪潮下&#xff0c;“远程工作”已经成为现代职场的一个重要趋势。对于设计师来说&#xff0c;这不仅是一种工作方式的转变&#xff0c;更是职业发展的新机遇。在这篇文章中&#xff0c;我将从以下9个方面&#xff0c;深入探讨远程工作设计师的机会、市场和职位…

【Axure RP9】动态面板使用------案例:包括轮播图和多方式登入及左侧菜单栏案例

目录 一 动态面板简介 1.1 动态面板是什么 二 轮播图 2.1 轮播图是什么 2.2 轮播图应用场景 2.3 制作实播图 三 多方式登入 3.1多方式登入是什么 3.3 多方式登入实现 四 左侧菜单栏 4.1左侧菜单栏是什么 4.2 左侧菜单栏实现 一 动态面板简介 1.1 动态面板是什么…

每日好题-A+B problem 高精度的加法和进位计算

C - A B Problem Description 给定两个整数 A,B&#xff0c;计算AB 的值&#xff0c;并计算出现进位的次数。 Input 两个整数 A,B(0≤A,B≤10^10^6)---没错就是10^1000000 Output 两行两个整数表示 AB 的值与出现进位的次数。 Samples Sample #1 Input 15 16 Outp…

OpenHarmony—ArkTS语言入门(构建应用页面)

上一章我们讲到了体验ArkTS&#xff0c;以及应ArkTS语言用页面构成&#xff0c;那么接下来我们接着一起学习以下内容 代码示例 上图便是前文中的页面构成的代码示例&#xff0c;接下来&#xff0c;我将逐一分析各段代码的作用&#xff1a; 1.如上图所示&#xff0c;这类以“”…

惯性导航基础知识学习----01惯性器件相关

&#x1f308;武汉大学惯性导航课程合集是入门惯导的精品课程~ 作为导航路上的鼠鼠我&#xff0c;要开始学习惯性导航了~ 需要达到的要求是大致了解惯导的原理等~ 后期会陆续更新惯导相关的知识和笔记等~ &#x1f42c; 本blog为 武汉大学惯性导航课程 的记录~ 感谢团队提供的开…