LeetCode 子集 & 子集II

Leetcode Subset I & II Problem 1: Subset I Given a set of distinct integers, S, return all possible subsets. Note: Elements in a subset must be in non-descending order. The solution set must not contain duplicate subs 阅读详情

子集

描述

给定一组不含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集)。

说明:解集不能包含重复的子集。

示例:

输入: nums = [1,2,3]
输出:
[
[3],
[1],
[2],
[1,2,3],
[1,3],
[2,3],
[1,2],
[]
]

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/subsets
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

分析

经典回溯,可以用模板解决
backtrack(nums, cur, left, visited):{
cur.size() == nums.size()
return
cur.size() <= nums.size() //这都是满足条件的解,甚至包括空子集
ans.push_back(cur)
for(int i = left; i<nums.size();i++){ //每次所有可以选的数
判断是否visited,没有的话就加入到cur里,标记visited
backtrack(nums, cur , i+1, visited)下一步递归
取消visited,从cur中弹出
}
}

代码

class Solution {
public:
    vector<vector<int>>ans;
void backtrack(vector<int>nums, vector<int>cur, int left, vector<bool>visited)
{
	int s = nums.size();
	if (cur.size() <= s)
	{
		ans.push_back(cur);
		//return;
	}
	if (cur.size() == s)
		return;
	for (int i = left; i < s; i++)
	{
		int nu = nums[i];
		if (visited[i] == false)
		{
			cur.push_back(nu);
			visited[i] = true;
			backtrack(nums, cur, i + 1, visited);
			cur.pop_back();
			visited[i] = false;
		}
	}
}
    vector<vector<int>> subsets(vector<int>& nums) {
        sort(nums.begin(), nums.end());
	//vector<int>empt;
	//ans.push_back(empt);
	vector<bool>visited;
	int si = nums.size();
	for (int i = 0; i < si; i++)
		visited.push_back(false);
	vector<int>cur;
	backtrack(nums, cur, 0, visited);
	return ans;
    }
};

子集II

描述

给定一个可能包含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集)。

说明:解集不能包含重复的子集。

示例:

输入: [1,2,2]
输出:
[
[2],
[1],
[1,2,2],
[2,2],
[1,2],
[]
]

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/subsets-ii
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

分析

和子集一样,只是多了有重复元素,这就和全排列2等问题一样了
还是两种思路,比较懒的方法就是用set,可以保证完全重复的数组不会加进去,反正是从左向右查的,不会出现 [1,2,1] [2,1,1]这种问题
另一种思路就是在每次递归时,查看是否nums[i]==nums[i-1],是的话就跳过,因为前者会包含在后者区间的解内

代码1 --set

class Solution {
public:
    vector<vector<int>>ans;
set<vector<int> > res;
void backtrack(vector<int>nums, vector<int>cur, int left, vector<bool>visited)
{
	int s = nums.size();
	if (cur.size() <= s)
	{
		//ans.push_back(cur);
		res.insert(cur);
	}
	if (cur.size() == s)
		return;
	for (int i = left; i < s; i++)
	{
		int nu = nums[i];
		if (visited[i] == false)
		{
			cur.push_back(nu);
			visited[i] = true;
			backtrack(nums, cur, i + 1, visited);
			cur.pop_back();
			visited[i] = false;
		}
	}
}
    vector<vector<int>> subsetsWithDup(vector<int>& nums) {
        sort(nums.begin(), nums.end());
	vector<bool>visited;
	int si = nums.size();
	for (int i = 0; i < si; i++)
		visited.push_back(false);
	vector<int>cur;
	backtrack(nums, cur, 0, visited);
	set<vector<int> > ::iterator it;
	for (it = res.begin(); it != res.end(); it++)
	{
		vector<int>temp = *it;
		ans.push_back(temp);
	}
	return ans;
    }
};

代码2 --no-set

class Solution {
public:
    vector<vector<int>>ans;
set<vector<int> > res;
void backtrack(vector<int>nums, vector<int>cur, int left, vector<bool>visited)
{
	int s = nums.size();
	if (cur.size() <= s)
	{
		ans.push_back(cur);
	}
	if (cur.size() == s)
		return;
	for (int i = left; i < s; i++)
	{
		int nu = nums[i];
		if (i != left && nums[i] == nums[i - 1])
			continue;
		if (visited[i] == false)
		{
			cur.push_back(nu);
			visited[i] = true;
			backtrack(nums, cur, i + 1, visited);
			cur.pop_back();
			visited[i] = false;
		}
	}
}
    vector<vector<int>> subsetsWithDup(vector<int>& nums) {
        sort(nums.begin(), nums.end());
	vector<bool>visited;
	int si = nums.size();
	for (int i = 0; i < si; i++)
		visited.push_back(false);
	vector<int>cur;
	backtrack(nums, cur, 0, visited);
	return ans;
    }
};
BES平台集成第三方音频算法避坑指南:以声加ENC为例,聊聊文件放置、内存分配与授权那些事 本文详细解析了在BES平台上集成声加ENC降噪算法的全流程,包括技术选型、系统架构设计、内存管理及量产授权等关键环节。特别针对BES平台的双核架构和内存限制,提供了文件放置、内存分配与授权验证的实用解决方案,帮助开发者高效实现音频算法集成。 阅读详情

相关推荐

Mac上安装Label Studio

以上步骤详细说明了如何在Mac上通过Anaconda安装Label Studio。记得根据你的具体需求选择是否创建新的环境,并使用conda或pip进行安装。安装完成后,务必验证Label Studio是否成功运行。

g2526的博客 1958

【LeetCode-中等】78. 子集(详解)

java:2进制法、回溯算法

丨康有为丨的博客 726

IDM更改下载路径的详细指南

Internet Download Manager(IDM)是一款功能全面的下载加速工具,它支持多种浏览器和协议,能够显著提升下载速度,同时提供断点续传、多线程下载等实用功能。IDM的用户界面简洁明了,操作便捷,使得用户能够轻松管理下载任务。此外,IDM还支持自动分类下载文件、定时下载等高级功能,进一步提升了用户的下载体验。通过本文的介绍,相信用户已经掌握了如何在IDM中更改下载路径的方法。这一功能不仅提升了下载效率和文件管理便捷性,还满足了用户的个性化需求。

nntxthml的博客 1763

【LeetCode】Day131-子集 I&II & 组合

子集 I&II【中等】-回溯法、附子集组合问题总结

qq_43417265的博客 312

实例讲解Simulink应用层开发CAN报文解包及CAN信号设置方法

本文通过讲解MCU CAN解包模块的模块设置、输入输出信号的设置及仿真测试验证,说明了CAN解包模块的设置方法、CAN解包模块输入输出信号的设置方法以及CAN解包模块的仿真测试及修正方法。在模型搭建过程中,建议养成一种搭建完成仿真测试验证的习惯,在模块阶段发现错误,解决错误,避免在后期模块集成之后报出大量错误,增加解决错误的工作量和难度。希望通过本文的介绍能给相关技术人员带来一些参考和帮助。

qq_43011586的博客 5681

用matlab编程求矩阵的极大无关组,向量组极大无关组表示问题

已知向量组T:Eqn11.gif (3.16 KB, 下载次数: 1)2013-10-21 19:19 上传.(1) 求向量组T的秩,并判断向量组T的相关性;(2) 求T的极大线性无关组;(3) 将其余的向量用所求的极大线性无关组线性表示。程序:&gt;&gt; A=[1 1 3 2;-1 1 -1 3;5-2 8 9;-1 3 1 7]&gt;&gt; r=rank(A)&gt;&gt; A1=...

weixin_35094083的博客 7388

LeetCode刷题--- 子集

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

元清的博客 2585

YOLOv5源码逐行超详细注释与解读(2)——推理部分detect.py

全网最详细的YOLOv5之推理部分detect.py源码逐行注释,近四万字的超详细讲解!小白入门必看!

路人贾的博客 5万+

Leetcode刷题详解——子集

在递归时我们需要保证递归结束时当前的状态与进行递归操作前的状态不变,而当我们在选择进行步骤2进行递归时,当前状态会发生变化,因此我们需要在递归结束时撤回添加操作,即进行回溯。数组一定存在2^(数组长度)个子集。对于查找子集,具可以定义一个数组,来记录当时的状态,并对其进行递归。数组的所有子集,我们需要对数组的每个元素进行选择或不选择的操作,即。返回该数组所有可能的子集(幂集)。将其添加至当前状态的集合。

勇气是明知不可为而为之 574

Yolo11改进:Block改进|MixDehazeNet,用于图像去雾网络的混合结构块|即插即用|附代码

https://arxiv.org/pdf/2305.17654 图像去雾是低级视觉领域中的一项典型任务。先前的研究验证了大型卷积核和注意力机制在去雾中的有效性。然而,存在两个缺点:引入大型卷积核时容易忽略图像的多尺度特性,而注意力模块的标准串联方式没有充分考虑雾分布的不均匀性。在本文中,我们提出了一种名为混合结构图像去雾网络(MixDehazeNet)的新型框架,该框架解决了上述两个问题。具体而言,它主要由两部分组成:多尺度并行大型卷积核模块和增强并行注意力模块。与单个大型卷积核相比,多尺度的并行大型卷积

m0_47867638的博客 1273

前端build工程的时候 出现 `build.rollupOptions.external 的解决方法

看到这个Bug,理性分析: 遇到 Rollup failed to resolve import “@vue/devtools-api” 错误可能是由于 Pinia 使用了 @vue/devtools-api 模块,而 Vite 的 Rollup 插件无法解析这个模块 ps:但是我前一秒还可以,加了个别代码,突然不行,我是不相信的 = - =

码农研究僧的博客 3055

经典的回溯算法题leetcode子集问题思路代码详解

如果各位对回溯不太了解可以看我昨天写的文章,以及上一篇着重整列了回溯经典的组合问题。

xiaoliii0401的博客 584

财务数字化——解读美的战略规划之财务组织体系建设【附全文阅读】

本文提出适用于集团企业的财务管控方案,面向财务负责人、HR及战略规划人员。方案整合四种管控模式,结合500强案例,构建&quot;职能定位-架构设计-权责划分-人才发展&quot;体系,涵盖财务五大模块。通过明确总部与事业部权责边界,提供组织架构等实操框架,旨在平衡财务管控与业务支持,提升效率与风控能力,满足集团财务体系规范化建设需求。

cdfunlove的博客 663

LeetCode 78&90 子集I&子集II 题解

LeetCode 78&amp;90 子集I&amp;子集II 题解LeetCode 78 子集I方法1方法290. 子集 II LeetCode 78 子集I LeetCode链接 给定一组不含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集)。 说明:解集不能包含重复的子集。 示例: 输入: nums = [1,2,3] 输出: [ [3], [1], [2], [1,2,3], [1,3], [2,3], [1,2], [] ] 方法1 本来还想用组合

qq_39618369的博客 181

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an &ldquo;advanced algorithms&rdquo; book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

【LeetCode】78. 子集 & 90. 子集 II

78. 子集 一、题目描述 给定一组不含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集)。 说明:解集不能包含重复的子集。 示例: 输入: nums = [1,2,3] 输出: [ [3], [1], [2], [1,2,3], [1,3], [2,3], [1,2], [] ] 二、解题思路 &amp; 代码 2.1 迭代 class Solution: def subsets(self, nums: List[int]) -&gt; List[Li

weixin_41888257的博客 415

visio安装包

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

Leetcode 78 子集 & 90 子集II & leetcode 46全排列 回溯算法总结

78.Given a set of distinct integers, nums, return all possible subsets (the power set). Note: The solution set must not contain duplicate subsets. Example: Input: nums = [1,2,3] Output: [ [3], [1], [2], [1,2,3], [1,3], [2,3], [1,2], [] ] 暴力解 求子集,先加一个空集,.

Black_Cater的博客 220

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

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

Leetcode 78. 子集 & 90. 子集 II

给你一个整数数组nums ,数组中的元素 互不相同 。返回该数组所有可能的子集(幂集)。 解集 不能 包含重复的子集。你可以按 任意顺序 返回解集。 示例 1: 输入:nums = [1,2,3] 输出:[[],[1],[2],[1,2],[3],[1,3],[2,3],[1,2,3]] 示例 2: 输入:nums = [0] 输出:[[],[0]] 提示: 1 &lt;= nums.length &lt;= 10 -10 &lt;= nums[i] &lt;= 10 nums 中的所..

Shiina Mashiro no youni 351

LeetCode - 78. 子集&90. 子集II【经典题解 - 回溯算法】

python 回溯算法

Mr_WoLong 529

00回溯/数组中等 leetcode78. 子集&90. 子集 II NC221 集合的所有子集(二)

78. 子集 90. 子集 II 题目描述 给定一组不含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集)。 说明:解集不能包含重复的子集。 示例: 输入: nums = [1,2,3] 输出: [ [3], [1], [2], [1,2,3], [1,3], [2,3], [1,2], [] ] 思路 回溯的做法 遍历整个数组,递归得到以每个元素为起始数字的所有子集。 以[1,2,3]为例,先求出以1开头的所有子集,然后是2开头的所有子集,最后是3。 递归结束标志:当标记递归深度的变量等于数组

31楼下小黑的博客 331

LeetCode 78子集&90子集II(回溯+剪枝)

给你一个整数数组nums,数组中的元素互不相同。返回该数组所有可能的子集(幂集)。 解集不能包含重复的子集。你可以按任意顺序返回解集。 因为互不相同,只需要简单回溯即可,确保不会有重复数字,每次往下遍历一层,start++即可,写代码的时候犯了些铸币错误,所以加了stdout,不过没什么影响就没删了 class Solution { public List&lt;List&lt;Integer&gt;&gt; subsets(int[] nums) { ...

m0_51630248的博客 200

Leetcode刷题之93.复原IP地址&78.子集&90.子集II

例如:"0.1.2.201" 和 "192.168.1.1" 是 有效的 IP 地址,但是 "0.011.255.245"、"192.168.1.312" 和 "192.168@1.1" 是 无效的 IP 地址。示例: 输入: nums = [1,2,3] 输出: [ [3], [1], [2], [1,2,3], [1,3], [2,3], [1,2], [] ]给定一个可能包含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集)。说明:解集不能包含重复的子集。

weixin_41072743的博客 175

力扣:416. 分割等和子集 & 1049. 最后一块石头的重量 II (动态规划)(二合一,一次吃透两道题)

有一堆石头,用整数数组 stones 表示。其中 stones[i] 表示第 i 块石头的重量。每一回合,从中选出任意两块石头,然后将它们一起粉碎。假设石头的重量分别为 x 和 y,且 x <= y。那么粉碎的可能结果如下:如果 x == y,那么两块石头都会被完全粉碎;如果 x!= y,那么重量为 x 的石头将会完全粉碎,而重量为 y 的石头新重量为 y-x。最后,最多只会剩下一块 石头。返回此石头 最小的可能重量。如果没有石头剩下,就返回 0。

2301_77160836的博客 1364

90. 子集 II

【代码】90. 子集 II。

Wzideng@qq.com 86

力扣90——子集 II

原题 给定一个可能包含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集)。 说明:解集不能包含重复的子集。 示例: 输入: [1,2,2] 输出: [ [2], [1], [1,2,2], [2,2], [1,2], [] ] 原题url:https://leetcode-cn.com/problems/subsets-ii/ 解题 递归 这道题,针对已经刷...

death05的博客 1355

LeetCode第90题_子集II

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

qq_40263592的博客 1632

编程题—leetcode78、90子集I、II

子集I 题目描述 给定一组不含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集)。 说明:解集不能包含重复的子集。 示例: 输入: nums = [1,2,3] 输出: [ [3], [1], [2], [1,2,3], [1,3], [2,3], [1,2], [] ] 来源:力扣(LeetCode) 链接:https://leetcode-cn.c...

code_AC的博客 521
上一篇: leetcode组合总和 II
下一篇: LeetCode 第k个排列 c++ 回溯
BeforeEasy
博客等级 码龄10年 92粉丝 207原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值