首页 > 其他 > 详细

Generate Parentheses

时间:2016-01-10 23:55:56      阅读:418      评论:0      收藏:0      [点我收藏+]

Given n pairs of parentheses, write a function to generate all combinations of well-formed parentheses.

For example, given n = 3, a solution set is:

"((()))", "(()())", "(())()", "()(())", "()()()"

class Solution {
public:
    /*
     * 采用递归,open 代表左括号的个数, close 代表右括号的个数,给定n个左括号,和n个右括号
     * 结束条件就是左括号已经全部加入字符串,这时候,将剩下的右括号也加入字符串
     * 保证一个字符串中右括号的个数小于左括号的个数,同时左括号先出现
     * 
     */
    vector<string> generateParenthesis(int n) {
        vector<string> res;
        string str = "";
        cmn(res, str, n, n);
        return res;
    }
    
    void cmn (vector<string>& res, string str, int open, int close) {
        //判断结束条件
         if (open == 0) {
             while (close) {
                 str += );
                 close--;
             }
             res.push_back(str);
             return;
         }
        //如果左括号存在,就将左括号加入字符串,这个判断不是必须的,可以去掉
        if (open) {
            cmn(res, str+(, open-1, close);
        }
        //如果剩下的右括号个数大于左括号的个数,就将右括号放入字符串
        if (close > open) {
            cmn(res, str+), open, close-1);
        }
    }
};

 

Generate Parentheses

原文:http://www.cnblogs.com/SpeakSoftlyLove/p/5119732.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!