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 }
  • 相关阅读:
    纯js实现10分钟倒计时
    js中的constructor
    双指放大缩小问题(不需要第三方插件)
    js异步加载的3种方式(转载)
    5种处理js跨域问题方法汇总(转载)
    oncopy="document.selection.empty()"跟oncopy="return false"什么区别?
    十进制 转换为 二进制
    99%的人都理解错了HTTP中GET与POST的区别(转载
    简单封装:检测邮箱是否合法
    Xshell记录日志的方法
  • 原文地址:https://www.cnblogs.com/zzw1024/p/10501677.html
Copyright © 2011-2022 走看看