LeetCode #22

来源:互联网 发布:ubuntu修改用户名 编辑:程序博客网 时间:2024/05/21 18:38

题目描述:

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:

[  "((()))",  "(()())",  "(())()",  "()(())",  "()()()"]

这道题是medium难度,但是它的递归方式比较复杂,不太容易理解。算法思路参考:http://blog.csdn.net/yutianzuijin/article/details/13161721

这道题类似深搜,左括号和右括号即为两种分支,尽可能搜索所有分支的情况,同时还要满足已产生的current_result中左括号大于右括号,所以剩余右括号数目大于左括号才能添加右括号,但是只要剩余左括号数目大于0,就可以添加左括号。另外需要注意的是all_result应该是引用传参,这样才能在在findAll递归过程中修改all_result。

class Solution {public:    vector<string> generateParenthesis(int n) {        vector<string> all_result;        string current_result;        findAll(all_result,current_result,n,n);        return all_result;    }        void findAll(vector<string>& all_result,string current_result,int left,int right)    {        if(left==0&&right==0)        {            all_result.push_back(current_result);            return;        }        if(left>0)        {            findAll(all_result,current_result+"(",left-1,right);        }        if(left<right)        {            findAll(all_result,current_result+")",left,right-1);        }    }};