Leetcode_generate-parentheses

来源:互联网 发布:vs2013mfc编程实例 编辑:程序博客网 时间:2024/05/16 04:50

地址:http://oj.leetcode.com/problems/generate-parentheses/

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:

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

思路:dfs+回溯。4ms。left表示还剩的 '(' 个数, 当left大于0时,即可以加 ')' , 也可以加 '(' ,任何一个加完回退回来即可。

参考代码:

class Solution {public:    int g_n;    void dfs(vector<string>&vec, string str, int left)    {        if(left==0)        {            for(int i = str.length(); i<2*g_n; ++i)                str+=')';            vec.push_back(str);            return;        }        if(str.length()<2*(g_n-left))        {            str+=')';            dfs(vec, str, left);            str = str.substr(0, str.length()-1);        }        str+='(';        dfs(vec, str, left-1);    }    vector<string> generateParenthesis(int n) {      vector<string>vec;      if(n<=0)          return vec;      string str;      this->g_n = n;      dfs(vec, str, n);      return vec;    }};

SECOND TRIAL

//left是剩余应该填入的'('的个数, diff是'(' 比 ')' 多出的个数, diff应该恒>=0

class Solution {private:    int n;    void dfs(vector<string>&ans, string str, int left, int diff)    {        if(left == n && !diff)        {            ans.push_back(str);            return;        }        if(left<n)        {            str += '(';            dfs(ans, str, left+1, diff+1);            if(diff>0)            {                str[str.length()-1]=')';                dfs(ans, str, left, diff-1);            }        }        else        {            str += ')';            dfs(ans, str, left, diff-1);        }    }public:    vector<string> generateParenthesis(int n) {        this->n = n;        vector<string>ans;        string str;        dfs(ans, "", 0, 0);        return ans;    }};


0 0
原创粉丝点击