DP(5)
来源:互联网 发布:微软办公软件2003 编辑:程序博客网 时间:2024/06/07 01:48
LeetCode #78. Subsets
求集合的所有子集
递归法
S(n) : 等于第n个元素与S(n-1)中的每个元素组成集合,外加{n}和全集。
vector<vector<int>> subsets(vector<int> &nums) { vector<vector<int>> sets; if (nums.size() == 0) return{ {} }; else { vector<int> ss{ nums }; int last = *(ss.end() - 1); ss.erase(ss.end() - 1); sets = subsets(ss); int len = sets.size(); for (int i = 0; i < len; i++) { vector<int> tmp = sets[i]; tmp.push_back(last); sets.push_back(tmp); } } return sets;}
复杂度
T(n) = 2T(n-1)+2;
位运算
对N个元素,让每个元素对应N的2进制表示中的一位。某位为0,则不在子集;为1,则在子集中。
void subset(int arr[], int len){ int mask = 0, i = 0; int end = (1 << len) - 1; //各位均为1, 2^n-1 bool nullset = false; for (mask = 0; mask <= end; mask++) //循环2^n次 { nullset = true; for (i = 0; i < len; i++) //循环n次 { if (((1 << i)&mask) != 0) { nullset = false; cout << arr[i]<<", "; } } if (nullset) cout << "@, "; cout << endl; }}
复杂度
类似字符串的子序列,N位,每位有2种状态,对应个数为
整体复杂度为
后记
其实N个元素的子集:
由二项式定理,也可以得到
感觉自己好傻逼啊。囧
0 0
- DP(5)
- DP经典5题 【DP】
- DP·数位DP(5)
- DP经典5题
- [5_1_theme] DP?
- DP经典5题
- dp
- dp
- dp
- 【DP】
- dp
- dp
- DP
- DP
- DP
- DP
- DP
- dp
- 使用Javascript中的alert()函数显示中文乱码
- eclipse中导入web项目变成java项目解决办法and dynamic web module和对应的TOMCAT 版本
- 【持久化框架】Mybatis简介与原理
- java io 流 设计模式
- 经典递推:铺地砖(2501)
- DP(5)
- 08.共享内存
- 09.NFS
- UVA 10881 Piotr's Ants
- lightoj 1259 - Goldbach`s Conjecture 【素数筛】
- java io
- poj3278 Catch That Cow BFS
- java SE基础(TCP Socket通信)
- 10.文件权限