您的位置:首页 > 其它

leetcode 22:Generate Parentheses(15-10-9)

2015-10-08 22:33 585 查看
题目:

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:

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

思路:
我们可以用递归来解,left表示剩下的左括号数,right表示剩下的右括号数,那么当left==0且right==0时,说明左右括号已经全部写完,可以将string插入到vector。

如果left>0就往string中添加一个'(',如果right>0就往string中添加一个')'。

时间复杂度:O(2^n)

实现:

class Solution {
public:
vector<string> generateParenthesis(int n) {
vector<string> res;
addingpar(res, "", n, 0);
return res;
}
void addingpar(vector<string> &v, string str, int n, int m){
if(n==0 && m==0) {
v.push_back(str);
return;
}
if(m > 0){ addingpar(v, str+")", n, m-1); }
if(n > 0){ addingpar(v, str+"(", n-1, m+1); }
}
};

补充:其实也可以理解为回溯的思想,我们构建的状态空间树如下:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: