日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Subsets

發(fā)布時間:2023/12/10 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Subsets 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

我的思路:二進(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)化。

class Solution { public: vector<vector<int> > subsets(vector<int> &S) { sort(S.begin(), S.end()); // 輸出要求有序 vector<vector<int> > result; const size_t n = S.size(); vector<int> v; for (size_t i = 0; i < 1 << n; i++) { for (size_t j = 0; j < n; j++) { //利用與 運(yùn)算符,成功的探測到 每一位上是否是1 ....記住 if (i & 1 << j) v.push_back(S[j]); } result.push_back(v); v.clear(); } return result; } };

  8ms

轉(zhuǎn)載于:https://www.cnblogs.com/yanqi110/p/4933911.html

總結(jié)

以上是生活随笔為你收集整理的Subsets的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。