78. Subsets
来源:互联网 发布:淘宝店铺金额怎么提现 编辑:程序博客网 时间:2024/06/08 10:17
Given a set of distinct integers, nums, return all possible subsets (the power set).
Note: 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], []]
由题意得,这一题是要把所有的情况都列举出来,是典型的暴力枚举的题目,时间复杂度都在O(2^n)左右。其中这一题可以用递归和迭代的方式来实现。其中对于每个数,都是选或者不选,所以在递归的时候,分别递归选这个数和不选这个数就行了,递归代码如下:
Code(LeetCode运行3ms):
vector<vector<int>> subsets(vector<int>& nums) { vector<vector<int>> result; vector<int> subset; findSubsets(nums, subset, 0, result); return result; } void findSubsets(vector<int> nums, vector<int>& subset, int step, vector<vector<int>>& result) { if (step == nums.size()) { result.push_back(subset); return; } findSubsets(nums, subset, step + 1, result); subset.push_back(nums[step]); findSubsets(nums, subset, step + 1, result); subset.pop_back(); }迭代的话,用了一个二进制的方法,例如nums={1,2,3,4},那么0000代表空集,0001代表{1},0010代表{2},以此类推,代码如下。
Code(LeetCode运行6ms)
vector<vector<int>> subsets(vector<int>& nums) { vector<vector<int>> result; int size = nums.size(); for (int i = 0; i < 1 << size; i++) { vector<int> subset; for (int j = 0; j < size; j++) { if (i & 1 << j) { subset.push_back(nums[j]); } } result.push_back(subset); } return result; }
阅读全文
0 0
- 78. Subsets
- 78. Subsets
- 78. Subsets
- 78. Subsets
- 78. Subsets
- 78. Subsets
- 78. Subsets
- 78. Subsets
- 78. Subsets
- 78. Subsets
- 78. Subsets
- 78. Subsets
- 78. Subsets
- 78. Subsets
- 78. Subsets
- 78. Subsets
- 78. Subsets
- 78. Subsets
- 学习笔记之图片旋转
- OpenGL 着色器基础
- C++复习(4):有关const的一系列问题
- the second project , total thinking
- ubuntu中的vi编辑器的一些简单操作
- 78. Subsets
- 文件系统 (NFS)
- hibernate 三种状态
- LeetCode-152. Maximum Product Subarray
- eclipse下设置tomcat,修改Java代码不必重启tomcat
- 数据类型之间的相互转换
- 生成订单号
- javascript获取项目根目录带项目名
- 13-CSS3提高