lintcode-427-生成括号

427-生成括号

给定 n 对括号,请写一个函数以将其生成新的括号组合,并返回所有组合结果。

样例

给定 n = 3, 可生成的组合如下:
"((()))", "(()())", "(())()", "()(())", "()()()"

标签

回溯法 递归 字符串处理 谷歌 Zenefits

思路

使用回溯+递归

code

class Solution {
public:
    /**
     * @param n n pairs
     * @return All combinations of well-formed parentheses
     */
    vector<string> generateParenthesis(int n) {
        // Write your code here
        if (n <= 0) {
            return vector<string>();
        }
        vector<string> result;
        string temp;
        generateParenthesis(n, temp, result, 0, 0);
        return result;
    }

    void generateParenthesis(int n, string temp, vector<string> &result, int lCount, int rCount) {
        if (lCount == n) {
            for (int i = rCount; i < n; i++) {
                temp += ')';
            }
            result.push_back(temp);
            return;
        }
        generateParenthesis(n, temp + '(', result, lCount + 1, rCount);
        if (lCount > rCount) {
            generateParenthesis(n, temp + ')', result, lCount, rCount + 1);
        }
    }
};
原文地址:https://www.cnblogs.com/libaoquan/p/7390486.html