首页 > 其他 > 详细

括号生存 leetcode 22

时间:2020-01-02 20:49:09      阅读:62      评论:0      收藏:0      [点我收藏+]

2.代码及注释

class Solution {
public:
    //存放结果的容器,初始化为空
    vector<string> ans{};
    //回溯算法 left为‘(‘的个数 right为‘)‘的个数,s为当前的字符串,k为当前字符串的长度,n为目标字符串的长度。
    void back_track(string s,int k,int n,int left,int right){
        /*
        回溯剪枝
        由有效的括号组成性质可知
        1.左右括号个数各占总体的一半,如果左右括号个数超出一半则必定是无效的
        2.左括号个数必定是大于右括号个数的
        */
        if(left>n/2||right>n/2) return ;
        if(right>left) return ;
        //当进行到最后一个时,则认为是有效的括号,并加入容器
        if(k==n){
            ans.push_back(s);
        }else{
            
            string temp = s;
            //添加‘(‘
            s+=(;
            back_track(s,k+1,n,left+1,right);
            //添加‘)‘
            s=temp+);
            back_track(s,k+1,n,left,right+1);
        }
        return ;
    }
    vector<string> generateParenthesis(int n) {
        if(n==0) return {""};
        back_track("(",1,n*2,1,0);
        return ans;
    }
};

括号生存 leetcode 22

原文:https://www.cnblogs.com/moumangtai/p/12134525.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!