1.深度优先搜索
设l,r记录生成过程中 ( 和 ) 的数量,可以理解为以*根节点,每个节点的左子节点是(,右子节点是),在生成的过程中若r>l,则返回上一层,若l=r=n,则说明生成结束,记录当前生成的信息
如下:
class Solution {
public:
vector<string> generateParenthesis(int n) {
//可以理解为以(为根节点的二叉树,其左子节点为(,右子节点为),求所有的情况,任何时候)的数量大于(的数量则返回
//l=r=n,则记录
vector<string> res;
dfs(res,"",0,0,n);
return res;
}
void dfs(vector<string>&res,string str,int l,int r,int n)
{
if(l>n||r>n||r>l)
return ;
if(l==n&&r==n)
{
res.push_back(str);
return ;
}
dfs(res,str+'(',l+1,r,n);
dfs(res,str+')',l,r+1,n);
return ;
}
};
2.广度优先搜索