题目

Given a set of distinct integers, nums, return all possible subsets.

Note:

Elements in a subset must be in non-descending order.

The solution set must not contain duplicate subsets.

For example,

If nums = [1,2,3], a solution is:

[
[3],
[1],
[2],
[1,2,3],
[1,3],
[2,3],
[1,2],
[]
]

分析

求给定一个集合的子集!

该题目与LeetCode 77 Combinations类似,都是动态规划思想的应用!

同理,不能采用暴力法解决问题,因为会带来很高的复杂度。

仔细分析,我们发现包含n个元素的集合的子集有以下三个部分组成:

  1. 第一部分,该集合前n-1个元素组成的集合的子集;
  2. 第二部分,该集合中最后一个元素构成的一个子集合;
  3. 第三部分,对该集合前n-1个元素组成的集合的子集,每一个都添加最后一个元素;

注意,对于返回的集合的全部子集包括一个空子集!

AC代码

class Solution {
public:
vector<vector<int>> subsets(vector<int>& nums) {
if (nums.empty())
return vector<vector<int>>(); sort(nums.begin(), nums.end()); vector<vector<int>> ret = getSubsets(nums);
//不要丢掉最后的空子集
ret.push_back(vector<int>()); return ret;
} vector<vector<int>> getSubsets(vector<int>& nums) {
if (nums.empty())
return vector<vector<int>>();
int len = nums.size();
//初始化一个包含空元素的结果vector
vector<vector<int> > ret; //用0~len-1个原数组元素,建立一个新数组
vector<int> tem_nums(nums.begin(), nums.begin() + len - 1);
vector<vector<int>> tmp = getSubsets(tem_nums);
int t_size = tmp.size(); //第一部分,0~len-1所有元素的真子集
for (int i = 0; i < t_size; i++)
{
ret.push_back(tmp[i]);
}//for //第二部分,加入第len个元素
ret.push_back(vector<int>(1, nums[len - 1])); //第三部分,0~len-1所有元素的真子集,加入第len个元素
for (int i = 0; i < t_size; i++)
{
tmp[i].push_back(nums[len - 1]);
ret.push_back(tmp[i]);
}//for return ret;
}
};

GitHub测试程序源码

LeetCode(78) Subsets的更多相关文章

  1. LeetCode(78):子集

    Medium! 题目描述: 给定一组不含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集). 说明:解集不能包含重复的子集. 示例: 输入: nums = [1,2,3] 输出: [ [3 ...

  2. LeetCode(90) Subsets II

    题目 Given a collection of integers that might contain duplicates, nums, return all possible subsets. ...

  3. LeetCode(275)H-Index II

    题目 Follow up for H-Index: What if the citations array is sorted in ascending order? Could you optimi ...

  4. LeetCode(220) Contains Duplicate III

    题目 Given an array of integers, find out whether there are two distinct indices i and j in the array ...

  5. LeetCode(154) Find Minimum in Rotated Sorted Array II

    题目 Follow up for "Find Minimum in Rotated Sorted Array": What if duplicates are allowed? W ...

  6. LeetCode(122) Best Time to Buy and Sell Stock II

    题目 Say you have an array for which the ith element is the price of a given stock on day i. Design an ...

  7. LeetCode(116) Populating Next Right Pointers in Each Node

    题目 Given a binary tree struct TreeLinkNode { TreeLinkNode *left; TreeLinkNode *right; TreeLinkNode * ...

  8. LeetCode(113) Path Sum II

    题目 Given a binary tree and a sum, find all root-to-leaf paths where each path's sum equals the given ...

  9. LeetCode(107) Binary Tree Level Order Traversal II

    题目 Given a binary tree, return the bottom-up level order traversal of its nodes' values. (ie, from l ...

随机推荐

  1. poj1273 Drainage Ditches 基础网络流

    #include <iostream> #include <queue> using namespace std; ][]; ]; //路径上每个节点的前驱节点 ]; int ...

  2. hdu1102 Constructing Roads 基础最小生成树

    //克鲁斯卡尔(最小生成树) #include<cstdio> #include<iostream> #include<algorithm> using names ...

  3. Eclipse - Maven项目Update Project后jdk版本变成1.5

    问题与分析 最近遇到个奇怪的问题,在Eclipse里对一个Maven项目进行Update Project(快捷键是 Alt+F5),原本jdk为1.8的项目忽然就变成了1.5,于是就报了一些错误. 我 ...

  4. SpringBoot | 问题 | 注解方式下无法发现Bean

    在排除注解的问题后,考虑扫描类的位置, [SpringBoot项目的Bean装配默认规则是根据Application类所在的包位置从上往下扫描! “Application类”是指SpringBoot项 ...

  5. Jmeter之Json Path Extractor 接受上一个请求的响应参数

    最近在使用Jmeter进行接口测试,被一个问题困扰了很久,就是第二个请求如何接收上一个请求响应中的参数,刚开始尝试着用网上普遍说的正则表达式,长了了N多次之,都没有达到我想要的效果,被整的够惨,于是, ...

  6. Hdu 5452 Minimum Cut (2015 ACM/ICPC Asia Regional Shenyang Online) dfs + LCA

    题目链接: Hdu 5452 Minimum Cut 题目描述: 有一棵生成树,有n个点,给出m-n+1条边,截断一条生成树上的边后,再截断至少多少条边才能使图不连通, 问截断总边数? 解题思路: 因 ...

  7. getAttribute()方法的第二个参数

    对于一个img元素,我们想获取它的src属性时可以有两种方式: 1.xxx.getAttribute("src") 2.直接通过xxx.src获取属性值 在src的属性值为相对路径 ...

  8. SQL 多字段去重

    select articleID from (select aeUID, max(articleID) articleID from [article] group by aeUID) a conca ...

  9. AJPFX关于面向对象之封装,继承,多态 (下)

    (3)private: 对于对于成员来说:只能在该成员隶属于的类中访问. 对于类来说:类不可以声明为private. 4)protected: 对于对于成员来说:相同包中的类可以访问(包访问权限):基 ...

  10. 4. iOS测试常用方法

    1.    [XCUIElement exists]方法只能确定这个View是否存在,即使不在当前屏幕上也返回True.如果要确定View是否在屏幕可见范围内,可以判断其Frame是否在Window的 ...