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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

022括号生成

發布時間:2025/3/20 编程问答 52 豆豆
生活随笔 收集整理的這篇文章主要介紹了 022括号生成 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
1 #include "000庫函數.h" 2 3 4 5 6 //使用回溯法,當左括號數量大于右括號數量,則可以放置右括號 7 void recall(vector<string>&bracket, string s, int left, int right) {//bracket使用引用,確保其變化會被保留 8 if (left > right)return; 9 if (left == 0 && right == 0)bracket.push_back(s); 10 else { 11 if (left > 0)recall(bracket, s + '(', left-1, right); 12 if (right > 0)recall(bracket, s + ')', left, right-1); 13 } 14 15 } 16 17 vector<string> generateParenthesis(int n) { 18 vector<string>bracket; 19 if (n < 1)return bracket; 20 recall(bracket, "",n, n); 21 return bracket; 22 23 } 24 25 每找到一個左括號,就在其后面加一個完整的括號,最后再在開頭加一個(),就形成了所有的情況, 26 需要注意的是,有時候會出現重復的情況,所以我們用set數據結構,好處是如果遇到重復項,不會加入到結果中 27 最后我們再把set轉為vector即可 28 29 vector<string> generateParenthesis(int n) { 30 set<string>t; 31 if (n == 0)t.insert(""); 32 else { 33 vector<string>pre = generateParenthesis(n - 1); 34 for (auto a : pre) { 35 for (int i = 0; i < a.size(); ++i) { 36 if (a[i] == '(') { 37 a.insert(a.begin() + i + 1, '('); 38 a.insert(a.begin() + i + 2, ''); 39 t.insert(a); 40 a.erase(a.begin() + i + 1, a.begin() + i + 3); 41 } 42 } 43 t.insert("()" + a); 44 } 45 46 } 47 return vector<string>(t.begin(), t.end());//強制類型轉換 48 49 } 50 51 52 void T022() { 53 vector<string>Res; 54 Res = generateParenthesis(3); 55 for (int i = 0; i < Res.size(); ++i) 56 cout << Res[i] << endl; 57 58 }

?

轉載于:https://www.cnblogs.com/zzw1024/p/10501677.html

總結

以上是生活随笔為你收集整理的022括号生成的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。