力扣--深度优先算法/回溯算法90.子集Ⅱ

思路分析:

  1. 成员变量:

    • result: 用于存储最终的子集结果。
    • path: 用于存储当前正在构建的子集。
  2. DFS函数:

    • dfs(vector<int>& nums, int start): 递归地生成子集。
      • 从给定的start索引开始遍历数组。
      • 如果当前元素与前一个元素相同(处理重复元素),则跳过,以避免产生重复的子集。
      • 将当前元素加入path中,然后将path加入result中。
      • 递归调用DFS,更新start为下一个不同的元素的索引。
      • 回溯:移除path的最后一个元素,以便探索其他可能性。
  3. 主函数 subsetsWithDup

    • 对输入数组nums进行排序,以确保相同元素相邻。
    • 初始化result为一个空集。
    • 调用DFS开始生成子集,初始索引为0。
    • 返回最终的子集结果 result
class Solution {
    vector<vector<int>> result;  // 存储最终的子集结果
    vector<int> path;  // 存储当前正在构建的子集

    // 深度优先搜索(DFS)函数用于生成子集
    void dfs(vector<int>& nums, int start) {
        for (int i = start; i < nums.size(); i++) {
            // 跳过重复元素,以避免产生重复的子集
            if (i != start && nums[i] == nums[i - 1])
                continue;

            // 将当前元素加入子集
            path.push_back(nums[i]);
            
            // 将当前子集加入结果
            result.push_back(path);

            // 递归调用DFS,更新起始索引为下一个不同元素的位置
            dfs(nums, i + 1);

            // 回溯:移除最后一个元素,以便探索其他可能性
            path.pop_back();
        }
        return;
    }

public:
    vector<vector<int>> subsetsWithDup(vector<int>& nums) {
        // 对输入数组进行排序,以处理重复元素
        sort(nums.begin(), nums.end());

        // 初始化结果为一个空子集
        result.push_back({});

        // 调用DFS开始生成子集,初始索引为0
        dfs(nums, 0);

        // 返回最终的子集结果 result
        return result;
    }
};

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

基于STM32的温湿度数据采集系统

目录 目录 I 摘要 I Abstract II 第一章 绪论 1 1.1温湿度传感器的背景及意义 1 1.2温湿度传感器国内发展现状 1 1.3温湿度传感器的发展趋势 2 第二章 温湿度原理及相关技术 3 2.1温湿度传感器 3 2.1.1温度传感器 3 2.1.2 湿度传感器 4 2.1.3 温湿度传感器物理参数及定义 5 2.…

计算机组成原理-练手题集合【期末复习|考研复习】

前言 总结整理不易&#xff0c;希望大家点赞收藏。 给大家整理了一下计算机组成原理中的各章练手题&#xff0c;以供大家期末复习和考研复习的时候使用。 参考资料是王道的计算机组成原理和西电的计算机组成原理。 计算机组成原理系列文章传送门&#xff1a; 第一/二章 概述和数…

信钰证券|股票多少岁可以开户?怎么开户?

网上处理股票开户要求投资者年龄为18-70周岁&#xff08;16-18周岁要求提交收入证明才能开户&#xff0c;70周岁及70周岁以上需求自己带身份证和银行卡去营业部现场处理开户&#xff09;。 开户流程&#xff1a; 1、选好券商&#xff0c;下载并注册相关券商APP&#xff1b; …

嵌入式工资为啥比纯软工资低那么多?

嵌入式工资为啥比纯软工资低那么多&#xff1f; 在开始前我分享下我的经历&#xff0c;我刚入行时遇到一个好公司和师父&#xff0c;给了我机会&#xff0c;一年时间从3k薪资涨到18k的&#xff0c; 我师父给了一些 电气工程师学习方法和资料&#xff0c;让我不断提升自己&…

Focal Modulation Networks聚焦调制网络

摘要 我们提出了 焦点调制网络 &#xff08;简称 FocalNets) &#xff0c;其中 自注意&#xff08; SA &#xff09;被 Focal Modulation 替换&#xff0c;这种机制 包括三个组件&#xff1a;&#xff08; 1 &#xff09;通过 depth-wise Conv 提取分级的上下文信息&#xff0c…

3D视觉引导缸套自动化上下料

缸套作为制造业中关键零部件&#xff0c;其下料环节的效率和精度直接影响到整个生产流程的顺利进行。随着3D视觉技术的不断发展&#xff0c;越来越多的企业开始采用3D视觉引导技术实现缸套的自动化下料&#xff0c;从而提升生产效率、降低成本并提高产品质量。 案例背景&#x…

【计算机视觉】图像处理算法(形态学滤波篇)

来源&#xff1a;《OpenCV3编程入门》&#xff0c;怀念毛星云大佬&#x1f56f;️ 说明&#xff1a;本系列重点关注各种图像处理算法的原理、作用和对比 形态学滤波(1 ):腐蚀与膨胀 形态学槪述 数学形态学的概念&#xff1a; 数学形态学(Mathematical morphology)是立在格论…

【数据结构与算法】解题20240312

这里写目录标题 一、字符串转换整数 (atoi)二、1. 两数之和三、128. 最长连续序列四、73. 矩阵置零 一、字符串转换整数 (atoi) 请你来实现一个 myAtoi(string s) 函数&#xff0c;使其能将字符串转换成一个 32 位有符号整数&#xff08;类似 C/C 中的 atoi 函数&#xff09;。…

前端之用HTML做一个汇款单

例子 代码 里面注释是我我对运用到的知识的理解 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>工商银行电子汇款单</title> </head> <body><h3>工商银行电子汇款单</…

docker学习进阶篇

一、dockerfile解析 官方文档&#xff1a; Dockerfile reference | Docker Docs 1.1、dockfile是什么&#xff1f; dockerfile是用来构建docker镜像的文本文件&#xff0c;由一条条构建镜像所需的指令和参数构成的脚本。 之前我们介绍过通过具体容器反射构建镜像(docker comm…

柚见第十一期(前端页面开发)

创建队伍 便于控制样式,在外面套一层div 创建假数据模拟后端传来数据 //假数据模拟 const initFormData { "name": "", "description": "", "expireTime": "", "maxNum": 0, "passwor…

基础小白快速Python---------时间日期

在Python中&#xff0c;time 模块提供了基本的时间相关功能。以下是一些常用的函数和方法&#xff1a; 1. time.time(): 返回自纪元&#xff08;1970年1月1日&#xff09;以来的秒数。 import time# 获取当前时间戳 current_time time.time() print(current_time) # 输出例如…

C++ 之LeetCode刷题记录(三十九)

&#x1f604;&#x1f60a;&#x1f606;&#x1f603;&#x1f604;&#x1f60a;&#x1f606;&#x1f603; 开始cpp刷题之旅。 目标&#xff1a;执行用时击败90%以上使用 C 的用户。 22. 括号生成 数字 n 代表生成括号的对数&#xff0c;请你设计一个函数&#xff0c;用…

Node.js与Webpack笔记(二)

上一篇&#xff1a;Node.js与Webpack笔记&#xff08;一&#xff09;-CSDN博客 目录 Webpack模块打包工具 1.Webpack简介以及体验 2.Webpack的作用 4.体验Webpack 如果运行package.json里的自定义命令&#xff1f; Webpack 默认入口和出口&#xff1f; 入门使用 5.Webp…

centos7.9安装nacos

centos7.9安装nacos2.3.1 在centos x86_64环境安装nacos2.31环境准备 jdk1.8 、 mysql、 nacos 在window11环境安装nacos2.31 在centos x86_64环境安装nacos2.31 环境准备 jdk1.8 、 mysql、 nacos Nacos 依赖 Java 环境来运行。我们通过下载编译后压缩包方式安装。 重点踩坑…

Java微服务 第二十一章 Java多线程安全与锁

&#x1f339;作者主页&#xff1a;青花锁 &#x1f339;简介&#xff1a;Java领域优质创作者&#x1f3c6;、Java微服务架构公号作者&#x1f604; &#x1f339;简历模板、学习资料、面试题库、技术互助 &#x1f339;文末获取联系方式 &#x1f4dd; 往期热门专栏回顾 专栏…

​​力矩电机的建模、仿真与选择

1 力矩电机建模 图1中 e i ( t ) {e_i}\left( t \right) ei​(t)为电机输入电压&#xff0c; L a {L_a} La​为电枢电感&#xff0c; R a {R_a} Ra​为电枢电阻&#xff0c; e m ( t ) {e_m}\left( t \right) em​(t)为电机工作时产生的反电动势&#xff0c; i a ( t ) {i_a}\l…

python爬虫(6)之处理数组

1、拆分数组 1、spilt&#xff08;&#xff09;函数 此函数的用处是将数组均分成几个数组 演示如下&#xff1a; import numpy as np ac np.array([1,2,8,9,3,5,5,8]) ac1 np.split(ac,2) ac2 np.split(ac,[3,6]) print(ac1,ac2) 结果如下&#xff1a; 其中若是一个数…

[java——基础] 双亲委派机制

目录 核心思想&#xff1a; 双亲委派机制的好处&#xff1a; 三种类加载器 解析源代码 双亲委派思想面试总结&#xff1a; 核心思想&#xff1a; 向上搜索&#xff0c;向下加载。 双亲委派机制的好处&#xff1a; 防止Java核心类被篡改&#xff0c;防止类的重复加载。 三…

力扣--动态规划/深度优先算法/回溯算法93.复原IP地址

这题主要用了动态规划和回溯算法。 动态规划数组初始化&#xff08;DP数组&#xff09;: 首先&#xff0c;创建一个二维数组dp&#xff0c;用于记录字符串中哪些部分是合法的IP地址。对字符串进行遍历&#xff0c;同时考虑每个可能的IP地址部分&#xff08;每部分由1到3个字符组…