题目大意:给出一个非负整数n,表示有n对括号,输出其所有合法的括号排列。
算法思想:
一步一步的构造括号序列。依据两个原则:1.当做扩号数小于N时可以添加左括号;2.当右括号数大于N时可以添加有括号。最后当左括号数等于N时表明产生一个合法排列,将括号补充完整。采用深度优先搜索找出所有可行方案。
代码如下:
class Solution {
public:
vector<string> generateParenthesis(int n) {
vector<string> res;
if(n>0) dfs(n,"",0,0,res);
return res;
}
void dfs(int n,string s,int l,int r,vector<string>&res){
if(l==n){
res.push_back(s.append(l-r,')'));
return ;
}
dfs(n,s+'(',l+1,r,res);
if(r<l)
dfs(n,s+')',l,r+1,res);
}
};