zoukankan      html  css  js  c++  java
  • 22.Generate Parentheses (String; Back-Track)

    Given n pairs of parentheses, write a function to generate all combinations of well-formed parentheses.

    For example, given n = 3, a solution set is:

    "((()))", "(()())", "(())()", "()(())", "()()()"

    思路:两个递归函数,互相调用

    class Solution {
    public:
        vector<string> generateParenthesis(int n) {
            if(n==0) return ret;
            
            dfsLeft("",0,0,n);
            return ret;
        }
        
        void dfsLeft(string s, int depthLeft, int depthRight, int n){ //add one left parenthesis
            if(depthLeft >= n){ //end left
                return;
            }
            else{
                s += '(';
                depthLeft++;
                dfsRight(s,depthLeft, depthRight, n);
                dfsLeft(s,depthLeft, depthRight, n);
            }
        }
       
        void dfsRight(string s, int depthLeft, int depthRight, int n){ //add one right parenthesis
            if(depthRight >= n){ //end all
                ret.push_back(s);
            }
            else if(depthRight >= depthLeft){ //end right
                return;
            }
            else{
                s += ')';
                depthRight++;
                dfsLeft(s,depthLeft, depthRight, n);
                dfsRight(s,depthLeft, depthRight, n);
            }
        }
    private:
        int len;
        vector<string> ret;
    
    };

    更简洁的写法:

    class Solution {
    public:
        vector<string> generateParenthesis(int n) {
            if(n == 0) return ret;
            
            len = n*2;
            dfsLeft(n, 0, "");
            return ret;
        }
        
        void dfsRight(int lNum, int rNum, string str){//add right parenthese
            while(rNum){ 
                str += ')';
                dfsLeft(lNum, --rNum, str);
            }
            if(str.length() == len){
                ret.push_back(str);
            }
        }
        
        void dfsLeft(int lNum, int rNum, string str){//add left parenthese
            while(lNum){
                str += '(';
                dfsRight(--lNum, ++rNum, str);
            }
        }
    private:
        int len;
        vector<string> ret;
    
    };
  • 相关阅读:
    Python多线程join的用法
    Python多线程互斥锁
    python Queue模块
    精度计算————乘法(大数乘小数)
    精度计算——大数阶乘
    python埃式筛法求素数
    Scala io操作
    scala io,ubuntu常见配置
    大数据之scala高级语法学习
    大数据之scala基本语法学习
  • 原文地址:https://www.cnblogs.com/qionglouyuyu/p/4705551.html
Copyright © 2011-2022 走看看