题解 | #括号生成#

括号生成

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

相关推荐

湫湫湫不会java:先投着吧,大概率找不到实习,没实习的时候再加个项目,然后把个人评价和荣誉奖项删了,赶紧成为八股战神吧,没实习没学历,秋招机会估计不多,把握机会。或者说秋招时间去冲实习,春招冲offer,但是压力会比较大
点赞 评论 收藏
分享
05-09 14:45
门头沟学院 Java
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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