难度中等14收藏分享切换为英文关注反馈
括号。设计一种算法,打印n对括号的所有合法的(例如,开闭一一对应)组合。
说明:解集不能包含重复的子集。
例如,给出 n = 3,生成结果为:
[ "((()))", "(()())", "(())()", "()(())", "()()()" ]
public class Solution {
List<string> res = new List<string>();
public void DFS(int l, int r, int restl, int restr, string curr) {
if(r > l) {
return;
}
if(restl == 0 && restr == 0) {
res.Add(curr);
}
if(restl != 0) {
curr += "(";
DFS(l+1, r, restl-1, restr, curr);
curr = curr.Substring(0, curr.Length-1);
}
if(restr != 0) {
curr += ")";
DFS(l, r+1, restl, restr-1, curr);
curr = curr.Substring(0, curr.Length-1);
}
}
public IList<string> GenerateParenthesis(int n) {
DFS(1, 0, n-1, n, "(");
return res;
}
}