leetcode Generate Parenthesis

题目:https://oj.leetcode.com/problems/generate-parentheses/

题意:给一个数量n,表示一共需要填的字符串中有多少组括号,然后让你返回的是各种不同的括号组合情况

思路:回溯(也就是暴力),那么有几个问题

1.返回的东西是一个单个的还是多个的(一般都是多个),这道题是把多个string 都存到一个vector,也就是说像遍历一棵树一样,直到叶子节点,那么就会出现一个结果

2.返回的方式是直接return,还是return 一个东西给上一层,依次return回第一层,我感觉基本回溯都是得出叶子节点即可,不用return回去,一般在外面声明一个变量去保存结果(们)就可以了

3.怎么算得到正确结果跳出——这道题就是左右括号都用完了

4.怎么算不正确的结果回溯(这道题里也就是不往下执行了)——这里我想了很久,肯定不可能所有结果都是正确的吧,但是这道题有这么种情况就不用纠错了,那就是,如果得到的string(在递归中的暂时结果)里左括号多余右括号,并且递归函数的过程中,先入左括号再入右括号,那么肯定能得到最终结果,这两个条件用if判断一下,其实也相当于排除了可能错误的结果

5.递归的驱使项是什么——就是剩下的左右括号的数量,一直减,直到为0,则return,相当于结束了。


class Solution {
public:
    vector<string> re;
    void dfs(string tmp,int left,int right){
        if(left ==0 && right ==0)
            re.push_back(tmp);
        if(left>0)
            dfs(tmp+"(",left -1,right);
        if(left<right)
            dfs(tmp+")",left,right-1);
        
    
    vector<string> generateParenthesis(int n) {
        int left = n;
        int right =n;
        dfs("",left,right);
        return re;
    }
};


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值