子集--力扣
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结果
总结
以上是关于子集--力扣的主要内容,如果未能解决你的问题,请参考以下文章
JavaScript返回某集合中的所有子集(力扣面试题 08.04. 幂集)