zoukankan      html  css  js  c++  java
  • LeetCode22:括号生成

    数字 n 代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且 有效的 括号组合。

    示例:

    输入:n = 3
    输出:[
    "((()))",
    "(()())",
    "(())()",
    "()(())",
    "()()()"
    ]

    采用回溯法,不断递归,在左括号数量不超过n时压入左括号,在右括号数量小于左括号时压入右括号,循环到底部就把产生的序列保存起来。

     1 class Solution {
     2 private:
     3     int len=0;
     4     vector<string> ret;
     5 public:
     6     vector<string> generateParenthesis(int n) {
     7         vector<char> cur;
     8         len=n;
     9         backtrace(0,0,cur);
    10         return ret;
    11     }
    12 
    13     void backtrace(int left, int right, vector<char> cur){
    14         if(left==len && right==len){
    15             string push="";
    16             for(auto it=cur.begin();it!=cur.end();it++)
    17                 push+=*it;
    18             //cout<<push<<endl;
    19             ret.push_back(push);
    20 
    21         }
    22         if(left<len){
    23             cur.push_back('(');
    24             backtrace(left+1,right,cur);
    25             cur.pop_back();
    26         }
    27             
    28         if(right<len && right<left){
    29             cur.push_back(')');
    30             backtrace(left,right+1,cur);
    31             cur.pop_back();
    32         }
    33         return ;
    34     }
    35 };

    其实可以直接声明string类型,string可以直接+或者push_back

  • 相关阅读:
    归并排序
    CTE 递归
    Cordova 入门文档
    Javascript 原型链
    Windows11 正式版偷渡开启安卓子系统
    快速解决gerrit merge confict问题
    利用VPS来搭建个人主页
    检测串行序列10010
    Verilog语法总结
    深度学习中常见优化算法学习笔记
  • 原文地址:https://www.cnblogs.com/rookiez/p/13197958.html
Copyright © 2011-2022 走看看