子集--力扣

Posted 穿迷彩服的鲨鱼

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了子集--力扣相关的知识,希望对你有一定的参考价值。


前言

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


一、示例

1.示例

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

2.示例

输入:nums = [0]
输出:[[],[0]]

二、代码解析

1.求子集

代码如下(示例):

/*例如[1 2 3]
* 先给个{}空集,此时ans={{}},size=1
* 第一次外循环之后 size=1 进入内循环 把之前的子集拿出来添加一个数据1-->curr={1}--> ans={{},{1}}--> size=2
* 第二次外循环之后 size=2 进入内循环 把之前的子集拿出来各自添加一个数据2-->curr={2},{1,2}-->ans={{},{1},{2},{1,2}}-->size=4
* 第三次外循环之后 size=4 进入内循环 把之前的子集拿出来各自添加一个数据3-->curr={3},{1,3},{2,3},{1,2,3}-->ans={{},{1},{2},{1,2},{3},{1,3},{2,3},{1,2,3}}-->size=8
*/
vector<vector<int>> subsets(vector<int>& nums)
{
	vector<vector<int>> ans;
	ans.push_back({});
	for (int i = 0; i < nums.size(); ++i)
	{
		int size = ans.size();
		for (int j = 0; j < size; ++j)
		{
			vector<int> curr = ans[j];
			curr.push_back(nums[i]);
			ans.push_back(curr);
		}
	}
	return ans;
}

2.测试代码

代码如下(示例):

#include <iostream>
#include<vector>
using namespace std;


vector<vector<int>> subsets(vector<int>& nums)
{
	vector<vector<int>> ans;
	ans.push_back({});
	for (int i = 0; i < nums.size(); ++i)
	{
		int size = ans.size();
		for (int j = 0; j < size; ++j)
		{
			vector<int> curr = ans[j];
			curr.push_back(nums[i]);
			ans.push_back(curr);
		}
	}
	return ans;
}

int main()
{
	vector<int> curr = { 1,2,3 };
	vector<vector<int>> ans = subsets(curr);
	for (int i = 0; i < ans.size(); i++)
	{
		for (int j = 0; j < ans[i].size(); j++)
		{
			cout << "[" << ans[i][j] << "]";
		}
		cout << endl;
	}
	return 0;
}

3结果

在这里插入图片描述


总结

在这里插入图片描述

以上是关于子集--力扣的主要内容,如果未能解决你的问题,请参考以下文章

[算法题解详细]DFS解力扣78子集

JavaScript返回某集合中的所有子集(力扣面试题 08.04. 幂集)

力扣算法JS LC [78. 子集] LC [90. 子集 II]

力扣 78. 子集

力扣子集 JAVA

力扣子集 JAVA