[算法分析与设计] leetcode 每周一题: 078. Subsets
2017-11-02 18:30
651 查看
题目链接:
078. Subsets
题目大意:
给定一个由各不相同的整数组成的集合 nums, 返回其所有的子集 (即 其 power set) ;
例如: 给定: nums =[1,
2, 3], 则输出可以是:
( 注: 题意应该是指顺序可以不同 )
解题过程:
(1) (这一题应该是很老的题了 ...) 考虑 powerset 的定义可知, 设有集合 S, 以及减去其一个元素e
后的子集 S', 则有: powerset(S) = powerset(S') ⋃ appended(powerset(S'), e), 其中
appended(S, e) 表示 集合之集合 S 中每个元素(集合)都加上元素 e 后形成的新集合 ;
(2) 而且本题也没有内存之类的限制, 所以可以按 (1) 中思路实现 ;
代码如下:
Runtime: 6 ms
题目链接:
078. Subsets
题目大意:
给定一个由各不相同的整数组成的集合 nums, 返回其所有的子集 (即 其 power set) ;
例如: 给定: nums =[1,
2, 3], 则输出可以是:
( 注: 题意应该是指顺序可以不同 )
解题过程:
(1) (这一题应该是很老的题了 ...) 考虑 powerset 的定义可知, 设有集合 S, 以及减去其一个元素e
后的子集 S', 则有: powerset(S) = powerset(S') ⋃ appended(powerset(S'), e), 其中
appended(S, e) 表示 集合之集合 S 中每个元素(集合)都加上元素 e 后形成的新集合 ;
(2) 而且本题也没有内存之类的限制, 所以可以按 (1) 中思路实现 ;
代码如下:
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
题目链接:
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 每周一题: 667. Beautiful Arrangement II
- [算法分析与设计] leetcode 每周一题: 80. Remove Duplicates from Sorted Array II
- [算法分析与设计] leetcode 每周一题: 126. Word Ladder II
- [算法分析与设计] leetcode 每周一题: 467. Unique Substrings in Wraparound String
- [算法分析与设计] leetcode 每周一题: 050. Pow(x, n)
- [算法分析与设计] leetcode 每周一题: UTF-8 Validation
- [算法分析与设计] leetcode 每周一题: 070. Climbing Stairs
- [算法分析与设计] leetcode 每周一题: Non-overlapping Intervals
- [算法分析与设计] leetcode 每周一题: Minimum Time Difference
- [算法分析与设计] leetcode 每周一题: Copy List with Random Pointer
- [算法分析与设计] leetcode 每周一题: 328. Odd Even Linked List
- [算法分析与设计] leetcode 每周一题: Find Right Interval
- [算法分析与设计] leetcode 每周一题: 420. Strong Password Checker
- [算法分析与设计] leetcode 每周一题: 007. Reverse Integer
- [算法分析与设计] leetcode 每周一题: Validate Binary Search Tree
- [算法分析与设计] leetcode 每周一题: 494. Target Sum
- [算法分析与设计] leetcode 每周一题: Contains Duplicate III
- [算法分析与设计] leetcode 每周一题: Surrounded Regions
- [算法分析与设计] leetcode 每周一题: 135. Candy
- [算法分析与设计] leetcode 每周一题: Word Ladder