您的位置:首页 > 其它

LeetCode22. Generate Parentheses

2016-08-01 19:57 447 查看
题目链接:https://leetcode.com/problems/generate-parentheses/

大意:给一个整数n,列出n对()所能组成的所有合法排列

例:n=3时,有四种排列["((()))","(()())","(())()","()(())","()()()"]

分析:n对()就表示一共可以放n个左括号和n个右括号,记录下左括号和右括号的使用情况:只要左括号没有放完,任何时刻都可以放;对于右括号限制较多,已放置的右括号数目一定是小于等于放置的左括号数目,所以剩下来的右括号比剩下的左括号多时,才能够允许放右括号。

递归实现:

class Solution {
public:
void generate(int left,int right,string s,vector<string> &rs){
if(left==0&&right==0){
rs.push_back(s);
}
if(left>0){
generate(left-1,right,s+"(",rs);
}
if(right>0&&right>left){
generate(left,right-1,s+")",rs);
}
}

vector<string> generateParenthesis(int n) {
vector<string> rs;
string s="";
generate(n,n,s,rs);
return rs;
}
};

感觉这种思路很容易理解,详细分析见:http://blog.csdn.net/yutianzuijin/article/details/13161721
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: