【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;
}
};
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;
}
};
相关文章推荐
- LeetCode 22. Generate Parentheses
- leetcode-22. Generate Parentheses
- Leetcode 22. Generate Parentheses
- Leetcode-22. Generate Parentheses
- (Leetcode)22. Generate Parentheses
- 【LeetCode】22. Generate Parentheses
- leetcode 22. Generate Parentheses-回溯|递归
- LeetCode 22. Generate Parentheses
- 【leetcode】22. Generate Parentheses
- [leetcode] 22. Generate Parentheses
- [leetcode]22. Generate Parentheses
- leetcode 22. Generate Parentheses
- leetcode No22. Generate Parentheses
- LeetCode 22. Generate Parentheses(构造)
- [LeetCode]--22. Generate Parentheses
- LeetCode-algorithms 22. Generate Parentheses
- 【leetcode】22. Generate Parentheses
- leetcode:22. Generate Parentheses
- [leetcode] 22. Generate Parentheses
- leetcode 22. Generate Parentheses 递归