算法-回溯篇09-子集 II

【leetcode】回溯刷题总结 有递归就有回溯,递归与回溯相辅相成。回溯搜索法是纯暴力搜索算法。一般的回溯问题都可以抽象为树结构,树的深度为递归次数,树的宽度为候选集合大小。 阅读详情

子集 II

力扣题目链接

题目描述

给你一个整数数组 nums ,其中可能包含重复元素,请你返回该数组所有可能的 子集(幂集)。
解集 不能 包含重复的子集。返回的解集中,子集可以按 任意顺序 排列。

解题思路

就是在上一题的基础上,加入一个去重就行。

题解

class Solution {
public:
    vector<vector<int>> ans;
    vector<int> path;

    void BackTrack(vector<int>& nums, int index) {
        if (index == nums.size()) {
            return;
        }
        for (int i = index; i < nums.size(); i++) {
            if(i != index && nums[i] == nums[i - 1]){
                continue;
            }
            path.push_back(nums[i]);
            ans.push_back(path);
            BackTrack(nums, i + 1);
            path.pop_back();
        }

        return;
    }

    vector<vector<int>> subsetsWithDup(vector<int>& nums) {
        ans.push_back(path);
        sort(nums.begin(), nums.end());
        BackTrack(nums, 0);

        return ans;
    }
};
【算法】九月算法打卡 比如n = 4,那么以1开头的单词有 3 * 2 * 1 个;n = 3,以1开头的单词有 2 * 1个,依次类推,只要得出 k 是当前阶乘的多少倍,那么就获取剩下的当中的第几个单词。2、移动前需要判断 当前左指针指向的位置height[l],与当前保存的左边界最大值lmax进行比较,并保存最大值。4、此时若 左边界(lmax)小于右边界(rmax),则左边界向中间移动。1、需要实现 isValid() 判断当前填入值后,当前数独是否有效。1、左右指针,左指针在最左边,右指针在最右边,两者不断向中间靠拢。 阅读详情

相关推荐

保姆级教程:用BIGEMAP和Global Mapper搞定5米精度DEM高程数据下载与处理

本文提供了一份详细的5米精度DEM高程数据处理教程,涵盖从BIGEMAP下载到Global Mapper处理的完整流程。通过实战案例和避坑指南,帮助用户掌握高效下载DEM数据、优化等高线生成及坐标系转换的关键技巧,适用于GIS新手和专业人士。

weixin_34169322的博客 391

回溯算法09-子集II(Java/子集问题的去重方法)

其中可能包含重复元素,请你返回该数组所有可能的。返回的解集中,子集可以按。

XYX_888的博客 565

2021-08-20

通过QQ号获取绑定的手机号 导语 偶有奇想,我们可以通过手机号来搜索获取其对应的QQ号,那么,反过来呢? 一.缩小范围 由于手机号属于隐私数据,腾讯QQ并没有直接给出通过QQ号查找对应手机号的接口。 国内的手机号有十一位数字,从数学的角度上来说,包含了1011种可能。如果遍历这1011个数据,通过QQ中手机号查找QQ号的接口来寻找,未免太过费时费力,根据网上查到的资料,同一个QQ号,在十分钟内只能进行30次查询(未验证)。因此,直接遍历的方法不现实。 在这10^13个数据中,包含着大量的可去除的无用数据。我

m0_56063822的博客 4725

算法刷题笔记——回溯算法篇

回溯法也可以叫做回溯搜索法,它是一种搜索的方式。在二叉树系列中,我们已经不止一次,提到了回溯,例如二叉树:以为使用了递归,其实还隐藏着回溯 (opens new window)。回溯是递归的副产品,只要有递归就会有回溯。所以以下讲解中,回溯函数也就是递归函数,指的都是一个函数。

Petrichorzncu的博客 816

紫光同创PGL50H开发板实战:盘古50KH视频板的多媒体处理与高速通信方案

本文详细介绍了基于紫光同创PGL50H FPGA芯片的盘古50KH视频开发板在多媒体处理与高速通信方面的实战应用。文章从开发板硬件架构解析入手,逐步指导开发环境搭建、DDR3内存控制器配置、HDMI视频输入输出实战,并重点探讨了利用板载HSST高速收发器实现光纤通信与万兆以太网的方案。最后,通过构建一个集多路视频采集、处理与光纤传输于一体的系统案例,展示了该开发板在高性能实时数据处理领域的强大潜力。

b9c0d的博客 486

Monocle2在R 4.3环境下的终极避坑指南:从安装到可视化全流程解析

本文提供了在R 4.3环境下安装和运行Monocle2的完整解决方案,重点解决了依赖包兼容性、源码修改及BEAM分析报错等关键问题。文章详细解析了从环境准备、依赖包处理、源码安装验证到从Seurat对象转换、拟时轨迹构建、高级可视化及性能优化的全流程,旨在帮助用户顺利完成单细胞拟时分析。

weixin_29206669的博客 1356

回溯算法大总结!!猛猛学!!!!

可以看出这棵树,一开始集合是1,2,3,4,从左向右取数,取过的数,不再重复取,每次从集合中选取元素,可选择的范围随着选择的进行而收缩,调整可选择的范围。n相当于树的宽度,k相当于树的深度。同样取过的元素不会重复,写回溯算法的时候,for从startIndex开始,如果是排列问题的话,就从0开始,因为排列是有序的,{1,2}和{2,1}是两个集合。回溯是一种搜索方式,回溯的本质是穷举,穷举所有可能,然后选出一个想要的答案,如果想要回溯法更高效一点,可以加一些剪枝操作,但也改不了回溯法就是穷举的本质。

weixin_45962681的博客 1108

国科大学习资料--遥感原理集图像处理(尤红建)--2019年期末考试

国科大学习资料–遥感原理集图像处理(尤红建)–2019年期末考试 国科大学习资料–遥感原理集图像处理(尤红建)–2019年期末考试 国科大学习资料–遥感原理集图像处理(尤红建)–2019年期末考试 ================================================================== ================================================================== ==============

无名何许人的博客 1470

代码随想录 | 回溯算法总结

回溯算法大总结

m0_62415132的博客 1475

RGB渐变颜色转换公式及例程

设Step=51,将RGB(255,0,0)颜色渐变为RGB(0,255,0),即RGB(255,0,0)经过51次颜色渐变转为RGB(0,255,0);设Step=51,将RGB(0,255,0)颜色渐变为RGB(0,0,255),即RGB(0,255,0)经过51次颜色渐变转为RGB(0,0,255);设Step=51,将RGB(0,0,255)颜色渐变为RGB(255,0,0),即RGB(0,0,255)经过51次颜色渐变转为RGB(255,0,0);分步骤的方式,使其渐变色循环整个颜色值;

1万+

GStreamer中h264parse元素

h264parse是 GStreamer 中处理 H.264 视频流的关键元素,主要负责解析和准备 H.264 流以便后续处理。

深之JohnChen的专栏 1027

【代码随想录】回溯算法(Python版)

①参数及返回值:集合candidites,目标值target,单一结果总和sum,单一结果path,结果集res,for循环起始位置startindex;③回溯搜索的遍历过程:取出index指向的数字的字符集,遍历字符集,加入s,index指向下一个数字,进一步递归,递归结束后,撤销处理结果。③单一搜索逻辑:因为要以左括号开始,如果open<n,则将path[i]='(',递归(i+1,open+1,path,res,n)否则将当前节点标记为使用过,然后加入到path,递归搜索,递归返回后撤销操作。

yyxm_1001的博客 1079

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

回溯。。。

回溯算法是由二叉树遍历算法改良而来,回溯会跳过当前节点做选择。

qq_42863961的博客 607

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

day 24第七章 回溯算法part03 93.复原IP地址 78.子集 90.子集II

思路:利用分割子串的思想递归搜索字符串,比较新的地方在于递归结束条件和回溯时的代码。2.回溯算法只撤销最近的决策,所以startindex不变。难点:1.子函数里的变量什么时候加&

2302_78039690的博客 357

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

代码随想录算法训练营第二十八天|93. 复原 IP 地址、78. 子集、90. 子集 II

无

fan15157721331的博客 96

每日算法 2024/09/09

这种需要回溯解决的题目,组合问题,子集问题,切割问题,如果遇到原先给你的集合中有重复元素,而输出的结果中不允许有重复结果的,需要先将原始数组排序,然后使用一个boolean类型的数组,标记每个元素是否被访问,对于重复的元素,如果前一个元素没有被访问,则不允许访问第二个元素

guojiaqi_的博客 496

代码随想录回溯算法专题03

子集问题需要注意收集树中叶子节点和内部节点的集合。对于去重,如果给的数组不能排序(递增子序列)或需要using数组需要标记别的信息(全排列问题),可以使用set集合来去重。set集合是记录本层元素是否重复使用,新的一层set都会重新定义(清空),所以要知道set只负责本层!1.使用used数组进行标记元素的选取状态2.单层for循环 i 从 0 开始。

m0_68161818的博客 157

算法总结--回溯

近期本人在leetcode上刷了不少回溯的题目,leetcode回溯专题能刷的题都刷了,现在对回溯做一个简单的总结。 回溯算法实际上一个类似枚举的搜索尝试过程,主要是在搜索尝试过程中寻找问题的解,当发现已不满足求解条件时,就“回溯”返回,尝试别的路径。回溯法是一种选优搜索法,按选优条件向前搜索,以达到目标。但当探索到某一步时,发现原先选择并不优或达不到目标,就退回一步重新选择,这种走不通就退回再走的技术为回溯法,而满足回溯条件的某个状态的点称为“回溯点”。许多复杂的,规模较大的问题都可以使用回溯法,有“

xiaoshe的专栏 272

算法学习day09(N皇后/解数独)

如果为空,然后进行for循环判断1-9,哪一个数字是合适的。满足一行就会往下递归一次,递归一次row就会加一次,直到row==n,(row是从0->n-1的),就可以把chessboard转为集合放到结果中了,单层递归逻辑:循环,每一个点(x,y)都要判断一下,如果满足n皇后规则,就递归到下一行,继续选取某个点,如果满足,继续下一行,直到(row==n);终止条件:startIndex>=nums.length(nums.length-1的时候是最后一个节点还要进去处理,只有当>=的时候才终止);

2301_78191305的博客 1020

回溯算法进阶——从LeetCode题海中总结常见套路

借鉴回溯思想的递归:LeetCode17.电话号码的字母组合 经典可重复回溯框架:LeetCode77.组合 基本不可重复回溯模板题:LeetCode面试题08.04.幂集 非典型可重复回溯:LeetCode面试题08.09.括号 一步一步优化剪枝的可重复回溯:LeetCode39.组合总和 套用模板不进行剪枝,超时: 可重复计算用的太多,先优化accumulate部分: 将求和步骤写进递归中,彻底优化accumlate 设置回溯函数起始下标进行剪枝 善用this指针和全局变量优化空间复杂

沉迷单车的追风少年 1393

2020/12/09---刷题打卡之回溯问题

回溯问题(排列、组合) 回溯算法一般可以解决组合、排列、切割、子集、棋盘(N皇后和解数独) 组合是无序的,排列是有序的。例如[1,2],组合就只有【1,2】,排列有[1,2]和【2,1】 回溯的一般解题步骤: result = [] def backtrack(路径, 选择列表): if 满足结束条件: result.add(路径) return for 选择 in 选择列表: 做选择 backtrack(路径,

ZZcppc的博客 323

day24 代码随想录 | 复原ip 地址 子集问题

正好由四个整数(每个整数位于0到255之间组成,且不能含有前导0),整数之间用'.'分隔。给定一个只包含数字的字符串s,用以表示一个 IP 地址,返回所有可能的,这些地址可以通过在s中插入'.'来形成。你重新排序或删除s中的任何数字。你可以按顺序返回答案。这个题和切割字符串相似,只不过判断条件不一样。而且我们切割中止都是切割到末尾就可以结束了。此外,从题目的要求可以看到 s的长度应该在4-12之间,小于或大于这个长度就不可能完成满足条件的ip地址回溯三部曲1. 回溯参数。

Zison_Chen的博客 1054

【回溯算法】|代码随想录算法训练营第22天|491.递增子序列、 46.全排列、47.全排列 II、【总结】

回溯算法主要解决以下问题组合问题:N个数里面按一定规则找出k个数的集合排列问题:N个数按一定规则全排列,有几种排列方式切割问题:一个字符串按一定规则有几种切割方式子集问题:一个N个数的集合里有多少符合条件的子集棋盘问题:N皇后,解数独等等解题思路主要是回溯三部曲void backtracking(参数) {if (终止条件) {存放结果;return;for (选择:本层集合中元素(树中节点孩子的数量就是集合的大小)) {处理节点;backtracking(路径,选择列表);

561

回溯

如果candidates[i] == candidates[i - 1] 并且 used[i - 1] == false,就说明:前一个树枝,使用了candidates[i - 1],也就是说同一树层使用过candidates[i - 1]。为什么 used[i - 1] == false 就是同一树层呢,因为同一树层,used[i - 1] == false 才能表示,当前取的 candidates[i] 是从 candidates[i - 1] 回溯而来的。,就能够在找到一个有效解后立即返回。

weixin_53287225的博客 238

代码随想录打卡第二十一天 回溯

本题解题思路是,如果当前i和startindex相同,并且当前元素是0,那么当前元素是作为单独元素加入path的,加入后应该开始下一层递归。本题难点在于对先导0和剪枝的处理。注释掉的部分是我通过了但是写的十分丑陋的代码。可能更好理解一点,所以也放在这里温故而知新。没什么难度,注意一下去重就行。

weixin_47742046的博客 178
上一篇: 算法-回溯篇08-子集
下一篇: 算法-回溯篇10-非递减子序列
Buling_0
博客等级 码龄5年 232粉丝 93原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值