Leetcode 22. Generate Parentheses
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:
s考え方:1.backtraking. 各位置で、現在どのくらいの左かっこと右かっこがあるかを記録し、左かっこがn個未満の場合は、左かっこを追加し続けます.もう1つの選択肢は、右かっこの個数がカッコを作るより少ない場合は、右かっこを追加することもできます.注意:以上の2つの場合は、実行を判断する必要があります.2.この問題はどのように数学やプログラム言語で問題をシミュレートしますか.大きなフレームワークはbacktrackingに違いありません.それから2つの変数で左右のカッコの数を統計し、カッコの数によって異なる操作をする必要があります.
For example, given n = 3, a solution set is:
[
"((()))",
"(()())",
"(())()",
"()(())",
"()()()"
]
s考え方:1.backtraking. 各位置で、現在どのくらいの左かっこと右かっこがあるかを記録し、左かっこがn個未満の場合は、左かっこを追加し続けます.もう1つの選択肢は、右かっこの個数がカッコを作るより少ない場合は、右かっこを追加することもできます.注意:以上の2つの場合は、実行を判断する必要があります.2.この問題はどのように数学やプログラム言語で問題をシミュレートしますか.大きなフレームワークはbacktrackingに違いありません.それから2つの変数で左右のカッコの数を統計し、カッコの数によって異なる操作をする必要があります.
// 1:backtracking. for+backtracking ,
// , for , backtrakcing
class Solution {
public:
void helper(vector<string>& res, string cur,int n,int left,int right){
if(left==n&&right==n){
res.push_back(cur);
return;
}
//for(int i=left;i
// : backtracking for+recursive
if(left'(' ,n,left+1,right);
}
//for(int i=right;i
// : backtracking for+recursive
if(right')' ,n,left,right+1);
}
}
vector<string> generateParenthesis(int n) {
//
vector<string> res;
helper(res,"",n,0,0);
return res;
}
};