您的位置:首页 > 其它

【leetcode】22. Generate Parentheses

2016-08-17 09:54 302 查看
一、题目描述

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:
[
"((()))",
"(()())",
"(())()",
"()(())",
"()()()"
]


题目解读:给一个n,写一个函数生成所有合法的n对括号的组合

思路:全排列问题,使用递归比较容易写出代码。首先注意使得组合合法的限制条件(1)有n对括号(n个左括号和n个右括号)(2)任一个位置上左括号数一定要大于等于右括号数。如果用left来计数左括号的个数,right来计数右括号的个数,容易得出递归结束的条件是left==n && right ==n

c++代码(4ms,12.82%)

class Solution {
private:
vector<string> result;
int n;

public:
void generate(int left, int right, string str, int rest){
//left:左括号数,right:右括号数,str:当前的字符串,rest:左括号数-右括号数(即要保证左括号数大于等于右括号数)
if(left == n && right == n){ //递归结束条件
result.push_back(str);
return;
}
if(left != n){
generate(left+1, right, str+'(', rest+1);
}
if(right!=n && rest>=1){
generate(left, right+1, str+')', rest-1);
}
return;
}

vector<string> generateParenthesis(int n) {
this->n=n;
generate(1,0, "(", 1);
return result;
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: