我的思路:
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;
}
};
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。