题解 | #括号生成#

括号生成

https://www.nowcoder.com/practice/c9addb265cdf4cdd92c092c655d164ca

方法一:
#include <vector>
class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     *
     * @param n int整型
     * @return string字符串vector
     */
    void dfs(vector<string>& v, string str, string str_l,string str_r, int n)
    {
        if(str_l.size()==n && str_r.size()==n)
        {
            v.emplace_back(str);
            return;
        }
       
        if(str_l.size()<n)
            dfs(v,str+"(",str_l+"(",str_r,n);

       
        if(str_r.size()<n && str_l.size()>str_r.size())
            dfs(v,str+")",str_l,str_r+")",n);
    }

    vector<string> generateParenthesis(int n) {
        // write code here
        vector<string> v;
        string str = "";
        string str_l = "";
        string str_r = "";

        dfs(v,str,str_l,str_r,n);

        return v;
    }
};


方法二:
class Solution {
public:
    void recursion(int left, int right, string temp, vector<string> &res, int n){
        //左右括号都用完了,就加入结果
        if(left == n && right == n){ 
            res.push_back(temp);
            return;
        }
        //使用一次左括号
        if(left < n) 
            recursion(left + 1, right, temp + "(", res, n);
        //使用右括号个数必须少于左括号
        if(right < n && left > right) 
            recursion(left, right + 1, temp + ")", res, n);
    }
    
    vector<string> generateParenthesis(int n) {
        //记录结果
        vector<string> res; 
        //记录每次组装的字符串
        string temp; 
        //递归
        recursion(0, 0, temp, res, n); 
        return res;
    }
};


方法三:将方法一中的str_l和str_2换成stack<char>类型,好像就不行了,看来stack作为形成有点像引用一样,加了元素进栈会影响后续的回溯;


虚数五行区解题中心 文章被收录于专栏

非淡泊无以明志,非宁静无以致远

全部评论

相关推荐

不愿透露姓名的神秘牛友
07-01 17:00
点赞 评论 收藏
分享
fRank1e:吓得我不敢去外包了,但是目前也只有外包这一个实习,我还要继续去吗
点赞 评论 收藏
分享
05-11 20:45
门头沟学院 Java
有担当的灰太狼又在摸...:零帧起手查看图片
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
昨天 11:35
程序员小白条:话太多,没实力和学历,差不多回答回答就行了,身份地位不一样
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务