我的思路:
1.需要所有的可行解,隸屬dfs + backtraing 的大類
2.每次當前狀態可能的下行狀態有兩種可能性:
2.1 能否補上'(',補上'('的條件是xl < n
2.2 能否補上')',補上')'的條件是xl < xr
class Solution {
public:
void dfs(vector<string> &vct,string & cur,int xl,int n)
{
int xr = cur.length() - xl;
if(xl + xr == n * 2)
{
vct.push_back(cur);
return;
}
if(xl < n)
{
cur += '(';
dfs(vct,cur,xl + 1,n);
cur = cur.substr(0,cur.length() - 1);
}
// 這裡需要注意的是:只有')'數小於'('數的時候才能補上')'
if(xr < xl)
{
cur += ')';
dfs(vct,cur,xl,n);
cur = cur.substr(0,cur.length() - 1);
}
}
vector<string> generateParenthesis(int n) {
vector<string> vct;
if(n <= 0)
return vct;
string cur;
dfs(vct,cur,0,n);
return vct;
}
};