class Solution {
List<String> list=new LinkedList<>();
public List<String> generateParenthesis(int n) {
DFS(0,0,"",n);
return list;
}
public void DFS(int left,int right,String s,int n){
if(s.length()==2*n){
list.add(s);
return;
}
if(left<n){
DFS(left+1,right,s+"(",n);
}
if(right<left){
DFS(left,right+1,s+")",n);
}
}
}
利用回溯算法 +深度优先遍历
有序的括号 就像二叉树一样 一层一层下去
先输入左括号 才有对应的右括号
而左括号要小于 等于括号总对数n
右括号要小于等于左括号数量
并且每次递归 left 和right 不需要改变 不然到输入右括号的时候 因为left每次都增加一个 右括号不能输入在对应位置。