zoukankan      html  css  js  c++  java
  • 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 }
  • 相关阅读:
    1058 A+B in Hogwarts (20)
    1036. Boys vs Girls (25)
    1035 Password (20)
    1027 Colors in Mars (20)
    1009. Product of Polynomials (25)
    1006. Sign In and Sign Out
    1005 Spell It Right (20)
    1046 Shortest Distance (20)
    ViewPager页面滑动,滑动到最后一页,再往后滑动则执行一个事件
    IIS7.0上传文件限制的解决方法
  • 原文地址:https://www.cnblogs.com/zzw1024/p/10501677.html
Copyright © 2011-2022 走看看