leetcode系列(44)Generate Parentheses

来源:互联网 发布:mac mobi转pdf软件 编辑:程序博客网 时间:2024/04/30 08:26

Given n pairs ofparentheses, write a function to generate all combinations of well-formedparentheses.

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

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

解答:这个题目用递归的方式可以比较方便的解决,假如有n个'('和')',ret里面放入当前valid的括号们(初始为空),加入已经放了若干个'('和')'到ret中,剩下rest_left个'('和rest_right个')',当rest_left>0时直接放'('到ret中都会满足valid parentheses,但是只有rest_right>rest_left的时候才能放')',因为rest_right < rest_left肯定是invalid,rest_right == rest_left时,放')'到ret中也会造成rest_right < rest_left从而invalid。

class Solution {public:    vector<string> generateParenthesis(int n) {        vector<string> ret;        string cur;        generateHelper(ret, n, n, cur);        return ret;    }    private:    void generateHelper(vector<string>& ret, int rest_left, int rest_right, const string& cur) {        if (rest_left == 0 && rest_right == 0) {            ret.push_back(cur);        }                if (rest_left > 0) {            generateHelper(ret, rest_left - 1, rest_right, cur + '(');        }                if (rest_right > rest_left) {            generateHelper(ret, rest_left, rest_right - 1, cur + ')');        }    }};


0 0