classSolution{public:voidbacktracking(vector<string>& ret,string& str,int n,int left,int right){if(left > n || right > left)return;if(left == n && left == right){
ret.emplace_back(str);return;}
str +='(';backtracking(ret,str,n,left +1,right);
str.pop_back();
str +=')';backtracking(ret,str,n,left,right +1);
str.pop_back();}
vector<string>generateParenthesis(int n){
vector<string> ret;
string str;backtracking(ret,str,n,0,0);return ret;}};
代码实现(四刷自解 DAY 281 C++)
classSolution{public:voidBackTracking(vector<string>& ret, string& tmp,constint n,int left,int right){if(left > n || right > left)return;if(n == left && left == right){
ret.emplace_back(tmp);return;}
tmp +='(';BackTracking(ret, tmp, n, left +1, right);
tmp.pop_back();if(left > right){
tmp +=')';BackTracking(ret, tmp, n, left, right +1);
tmp.pop_back();}return;}
vector<string>generateParenthesis(int n){
vector<string> ret;
string str;BackTracking(ret, str, n,0,0);return ret;}};
代码实现(五刷自解 DAY 5 Golang)
var ret []stringfuncBacktracking(tmp []byte, n, left, right int){if right > left || left > n {return}if left == n && right == left {
ret =append(ret,string(tmp))return}
tmp =append(tmp,'(')Backtracking(tmp, n, left +1, right)
tmp = tmp[:len(tmp)-1]if left > right {
tmp =append(tmp,')')Backtracking(tmp, n, left, right +1)
tmp = tmp[:len(tmp)-1]}}funcgenerateParenthesis(n int)[]string{
tmp :=[]byte{}Backtracking(tmp, n,0,0)
tmpcopy :=[]string{}
tmpcopy, ret = ret, tmpcopy
return tmpcopy
}