题解 | #括号生成#

括号生成

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

递归求解

此题想法就是从空字符串开始先填一个 "(",然后下一个可以是 "(" 或者 ")",当然每有一个 "(" 时,后面都需要对应一个 ")" ,依次往后填充即可。

// 这一句就是限制有一个"("时,后面必然会填充一个")"
if(left<right) dfs(str+")",left,right-1,ret);
// 这一句可以保证先填充"(",并且可以多次填充"("
if(left>0) dfs(str+"(",left-1,right,ret);

完整代码:

class Solution {
public:
    /**
     * 
     * @param n int整型 
     * @return string字符串vector
     */
    vector<string> generateParenthesis(int n) {
        // write code here
        vector<string> ret;
        dfs("",n,n,ret);
        return ret;
    }
    void dfs(string str,int left,int right, vector<string>& ret){
        if(left==0 && right==0){
            ret.push_back(str);
            return;
        }
        if(left<right) dfs(str+")",left,right-1,ret);
        if(left>0) dfs(str+"(",left-1,right,ret);
    }
};
全部评论

相关推荐

我的offer呢😡:这不才9月吗,26到明年毕业前能一直找啊,能拿下提前批,转正的,offer打牌的都是有两把刷子的,为什么非要跟他们比。如果别人是9本硕+金牌+好几段大厂实习呢?如果别人是双非通天代呢?如果别人是速通哥呢?,做好自己就行了,我们做不到他们一样提前杀死比赛,但晚点到终点也没啥关系吧
双非应该如何逆袭?
点赞 评论 收藏
分享
迷茫的大四🐶:你这个拿去投央国企吧,投私企包过不了的
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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