LeetCode(78) Subsets
题目
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个元素的集合的子集有以下三个部分组成:
- 第一部分,该集合前n-1个元素组成的集合的子集;
- 第二部分,该集合中最后一个元素构成的一个子集合;
- 第三部分,对该集合前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;
}
};
LeetCode(78) Subsets的更多相关文章
- LeetCode(78):子集
Medium! 题目描述: 给定一组不含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集). 说明:解集不能包含重复的子集. 示例: 输入: nums = [1,2,3] 输出: [ [3 ...
- LeetCode(90) Subsets II
题目 Given a collection of integers that might contain duplicates, nums, return all possible subsets. ...
- LeetCode(275)H-Index II
题目 Follow up for H-Index: What if the citations array is sorted in ascending order? Could you optimi ...
- LeetCode(220) Contains Duplicate III
题目 Given an array of integers, find out whether there are two distinct indices i and j in the array ...
- LeetCode(154) Find Minimum in Rotated Sorted Array II
题目 Follow up for "Find Minimum in Rotated Sorted Array": What if duplicates are allowed? W ...
- 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 ...
- LeetCode(116) Populating Next Right Pointers in Each Node
题目 Given a binary tree struct TreeLinkNode { TreeLinkNode *left; TreeLinkNode *right; TreeLinkNode * ...
- 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 ...
- 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 ...
随机推荐
- poj1273 Drainage Ditches 基础网络流
#include <iostream> #include <queue> using namespace std; ][]; ]; //路径上每个节点的前驱节点 ]; int ...
- hdu1102 Constructing Roads 基础最小生成树
//克鲁斯卡尔(最小生成树) #include<cstdio> #include<iostream> #include<algorithm> using names ...
- Eclipse - Maven项目Update Project后jdk版本变成1.5
问题与分析 最近遇到个奇怪的问题,在Eclipse里对一个Maven项目进行Update Project(快捷键是 Alt+F5),原本jdk为1.8的项目忽然就变成了1.5,于是就报了一些错误. 我 ...
- SpringBoot | 问题 | 注解方式下无法发现Bean
在排除注解的问题后,考虑扫描类的位置, [SpringBoot项目的Bean装配默认规则是根据Application类所在的包位置从上往下扫描! “Application类”是指SpringBoot项 ...
- Jmeter之Json Path Extractor 接受上一个请求的响应参数
最近在使用Jmeter进行接口测试,被一个问题困扰了很久,就是第二个请求如何接收上一个请求响应中的参数,刚开始尝试着用网上普遍说的正则表达式,长了了N多次之,都没有达到我想要的效果,被整的够惨,于是, ...
- Hdu 5452 Minimum Cut (2015 ACM/ICPC Asia Regional Shenyang Online) dfs + LCA
题目链接: Hdu 5452 Minimum Cut 题目描述: 有一棵生成树,有n个点,给出m-n+1条边,截断一条生成树上的边后,再截断至少多少条边才能使图不连通, 问截断总边数? 解题思路: 因 ...
- getAttribute()方法的第二个参数
对于一个img元素,我们想获取它的src属性时可以有两种方式: 1.xxx.getAttribute("src") 2.直接通过xxx.src获取属性值 在src的属性值为相对路径 ...
- SQL 多字段去重
select articleID from (select aeUID, max(articleID) articleID from [article] group by aeUID) a conca ...
- AJPFX关于面向对象之封装,继承,多态 (下)
(3)private: 对于对于成员来说:只能在该成员隶属于的类中访问. 对于类来说:类不可以声明为private. 4)protected: 对于对于成员来说:相同包中的类可以访问(包访问权限):基 ...
- 4. iOS测试常用方法
1. [XCUIElement exists]方法只能确定这个View是否存在,即使不在当前屏幕上也返回True.如果要确定View是否在屏幕可见范围内,可以判断其Frame是否在Window的 ...