DFS加上一些剪枝策略:
class Solution {
public:
map<string, bool> m;
vector<string> generateParenthesis(int n) {
vector<string> v;
Func(v, "", 0, 0, n);
return v;
}
void Func(vector<string> &v, string str, int left, int right, int n){
if(left > n || right > n || right > left) return;
if(left == n && right == n){
if(!m[str]){
v.push_back(str);
m[str] = true;
}
}
else{
Func(v, str + '(', left + 1, right, n);
Func(v, str + ')', left, right + 1, n);
}
}
};