Subsets
我的思路:二進(jìn)制位上有1則加
class Solution { public:vector<vector<int>> subsets(vector<int>& nums) {vector<vector<int>> res;sort(nums.begin(),nums.end());for(int i=0;i<pow(2,nums.size());++i){vector<int> path;f(i,path,nums);res.push_back(path);}return res;}void f(int i,vector<int> &path,vector<int> &nums){auto c=nums.begin();while(i){int j=i%2;i=i/2;if(j==1)path.push_back(*(c+j-1));c++;}} };16ms
二進(jìn)制法
本方法的前提是:集合的元素不超過int 位數(shù)。用一個int 整數(shù)表示位向量,第i 位為1,則表示
選擇S[i],為0 則不選擇。例如S={A,B,C,D},則0110=6 表示子集{B,C}。
這種方法最巧妙。因為它不僅能生成子集,還能方便的表示集合的并、交、差等集合運(yùn)算。設(shè)
兩個集合的位向量分別為B1 和B2,則B1 [ B2;B1 \ B2;B1△B2 分別對應(yīng)集合的并、交、對稱差。
二進(jìn)制法,也可以看做是位向量法,只不過更加優(yōu)化。
8ms
轉(zhuǎn)載于:https://www.cnblogs.com/yanqi110/p/4933911.html
總結(jié)
- 上一篇: 利用matlab绘制流场中的流线
- 下一篇: AWK高级编程 转载