您的位置:首页 > 其它

Leetcode: Generate Parentheses

2013-10-01 23:49 344 查看
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:

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


void parenthesis(char* str, int left, int right, int n, vector<string> &res)
{
if(left == right && left+right == 2*n)
{
stringstream ss(str);
string tmp;
ss>>tmp;
//cout<<tmp<<endl;
res.push_back(tmp);
return;
}
if(left<right || left+right>=2*n)return;
int index = left+right;
str[index] = '(';
parenthesis(str,left+1,right,n,res);

str[index] = ')';
parenthesis(str,left,right+1,n,res);
}
vector<string> generateParenthesis(int n) {
// Start typing your C/C++ solution below
// DO NOT write int main() function
vector<string> res;
char* str = new char[2*n+1];
str[2*n] = '\0';
parenthesis(str,0,0,n,res);
return res;
}


第二遍的代码:

class Solution {
public:
void backTracking(vector<string> &res, string str, int left, int right, int n)
{
if(left < right || right + left > n*2) return;
if(left == n && right == n) { res.push_back(str); return; }
backTracking(res, str + "(", left + 1, right, n);
backTracking(res, str + ")", left, right + 1, n);
}

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