Generate Parentheses

来源:互联网 发布:金融数据分析师是什么 编辑:程序博客网 时间:2024/05/01 04:11

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, 左括号一定要先出现,右括号再出现,所以可以用left和right分别定义左括号右括号各剩几个是合理的,如果left剩的>right剩的,则说明前面出现的左括号的数目小于右括号的数目,这样是不合理的,比如)这种情况,先有右括号而没有左括号。

class Solution {public:    vector<string> generateParenthesis(int n) {        vector<string> result;        if (n <= 0) {            return result;        }                string item;        generateUtil(result, item, n, n);                return result;    }        void generateUtil(vector<string> &result, string &item, int left, int right) {        if (left > right) {            return;        }                if (left == 0 && right == 0) {            result.push_back(item);            return;        }                if (left > 0) {            item.push_back('(');            generateUtil(result, item, left - 1, right);            item.pop_back();        }                if (right > 0) {            item.push_back(')');            generateUtil(result, item, left, right - 1);            item.pop_back();        }    }};


0 0