现在的位置: 首页 > 综合 > 正文

Generate Parentheses

2018年04月01日 ⁄ 综合 ⁄ 共 730字 ⁄ 字号 评论关闭

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题。规则是:在任意0-i的地方,"("的个数必须>=")"的个数才符合规则。因此,当left<n时,可使用"(",当left>right可使用")"。
class Solution {
private:
    vector<string> res;
    string perRes;
public:
    void generateParenthesisHelper(int pos, int left, int right, int n) {
        if (pos == 2*n) {
            res.push_back(perRes);
        }
        else {
            if (left < n) {
                perRes[pos] = '(';
                generateParenthesisHelper(pos+1, left+1, right, n);
            }
            if (left > right) {
                perRes[pos] = ')';
                generateParenthesisHelper(pos+1, left, right+1, n);
            }
        }
    }
    vector<string> generateParenthesis(int n) {
         res.clear();
         if(n <= 0) {
             return res;
         }
         perRes.clear();
         perRes.resize(2*n);
         generateParenthesisHelper(0,0,0,n);
         return res;
    }
};

抱歉!评论已关闭.