[算法分析与设计] 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


阅读全文
0 0
原创粉丝点击