[算法分析与设计] leetcode 每周一题: 078. Subsets
来源:互联网 发布:linux 对文件排序 编辑:程序博客网 时间:2024/04/29 07:31
题目链接:
078. Subsets
题目大意:
给定一个由各不相同的整数组成的集合 nums, 返回其所有的子集 (即 其 power set) ;
例如: 给定: nums =[1, 2, 3], 则输出可以是:
[ [3], [1], [2], [1,2,3], [1,3], [2,3], [1,2], []]
( 注: 题意应该是指顺序可以不同 )
解题过程:
(1) (这一题应该是很老的题了 ...) 考虑 powerset 的定义可知, 设有集合 S, 以及减去其一个元素e 后的子集 S', 则有: powerset(S) = powerset(S') ⋃ appended(powerset(S'), e), 其中 appended(S, e) 表示 集合之集合 S 中每个元素(集合)都加上元素 e 后形成的新集合 ;
(2) 而且本题也没有内存之类的限制, 所以可以按 (1) 中思路实现 ;
代码如下:
class Solution {public: using Set = vector<int>; using SetOfSet = vector<vector<int>>; SetOfSet powerset(Set nums) { if (nums.size() == 0) { return SetOfSet{ Set{} }; } auto e = nums.back(); nums.pop_back(); auto ret = powerset(nums); for (size_t i = 0, oldSize = ret.size(); i < oldSize; i++) { auto s = ret[i]; s.push_back(e); ret.push_back(s); } return ret; } vector<vector<int>> subsets(vector<int>& nums) { auto s = nums; return powerset(s); }};
Runtime: 6 ms
题目链接:
078. Subsets
题目大意:
给定一个由各不相同的整数组成的集合 nums, 返回其所有的子集 (即 其 power set) ;
例如: 给定: nums =[1, 2, 3], 则输出可以是:
[ [3], [1], [2], [1,2,3], [1,3], [2,3], [1,2], []]
( 注: 题意应该是指顺序可以不同 )
解题过程:
(1) (这一题应该是很老的题了 ...) 考虑 powerset 的定义可知, 设有集合 S, 以及减去其一个元素e 后的子集 S', 则有: powerset(S) = powerset(S') ⋃ appended(powerset(S'), e), 其中 appended(S, e) 表示 集合之集合 S 中每个元素(集合)都加上元素 e 后形成的新集合 ;
(2) 而且本题也没有内存之类的限制, 所以可以按 (1) 中思路实现 ;
代码如下:
class Solution {public: using Set = vector<int>; using SetOfSet = vector<vector<int>>; SetOfSet powerset(Set nums) { if (nums.size() == 0) { return SetOfSet{ Set{} }; } auto e = nums.back(); nums.pop_back(); auto ret = powerset(nums); for (size_t i = 0, oldSize = ret.size(); i < oldSize; i++) { auto s = ret[i]; s.push_back(e); ret.push_back(s); } return ret; } vector<vector<int>> subsets(vector<int>& nums) { auto s = nums; return powerset(s); }};
Runtime: 6 ms
- [算法分析与设计] leetcode 每周一题: 078. Subsets
- [算法分析与设计] leetcode 每周一题: 135. Candy
- [算法分析与设计] leetcode 每周一题: Word Ladder
- [算法分析与设计] leetcode 每周一题: Surrounded Regions
- [算法分析与设计] leetcode 每周一题: 201. Bitwise AND of Numbers Range
- [算法分析与设计] leetcode 每周一题: 162. Find Peak Element
- [算法分析与设计] leetcode 每周一题: 62. Unique Paths
- [算法分析与设计] leetcode 每周一题: 667. Beautiful Arrangement II
- [算法分析与设计] leetcode 每周一题: 215. Kth Largest Element in an Array
- [算法分析与设计] leetcode 每周一题: 053. Maximum Subarray
- [算法分析与设计] leetcode 每周一题: 467. Unique Substrings in Wraparound String
- [算法分析与设计] leetcode 每周一题: 126. Word Ladder II
- [算法分析与设计] leetcode 每周一题: 335. Self Crossing
- [算法分析与设计] leetcode 每周一题: Set Matrix Zeroes
- [算法分析与设计] leetcode 每周一题: 542. 01 Matrix
- [算法分析与设计] leetcode 每周一题: 007. Reverse Integer
- [算法分析与设计] leetcode 每周一题: 071. Simplify Path
- [算法分析与设计] leetcode 每周一题: Copy List with Random Pointer
- Spark streaming 执行流程源码图
- [问题]Ubuntu如何升级git
- html&css------添加视频(11/2)
- 静态数据更新
- 定位到html
- [算法分析与设计] leetcode 每周一题: 078. Subsets
- 安卓内存,性能监测
- Tomcat在Linux上的安装与配置
- Ubuntu VLAN配置troubleshooting
- C语言
- #BZOJ2054#疯狂的馒头(并查集经典)
- 单例模式
- windows环境下TensorFlow-gpu版本的安装
- Python中单线程、多线程和多进程的效率对比实验