题解 | #括号生成#

括号生成

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);
    }
};
全部评论

相关推荐

白火同学:1、简历可以浓缩成一页,简历简历先要“简”方便HR快速过滤出有效信息,再要“历”用有效信息突出个人的含金量。 2、教育背景少了入学时间~毕业时间,HR判断不出你是否为应届生。 3、如果你的平台账号效果还不错,可以把账号超链接或者用户名贴到对应位置,一是方便HR知道你是具体做了什么内容的运营,看到账号一目了然,二是口说无凭,账号为证,这更有说服力。
面试被问期望薪资时该如何...
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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