
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每次都增加一个 右括号不能输入在对应位置。
该博客探讨了如何利用回溯算法和深度优先遍历来生成所有可能的括号组合,确保左括号数量小于等于总括号对数,并保持正确的配对。在递归过程中,左右括号的添加受到有效条件的限制,从而保证生成的括号字符串正确无误。
208

被折叠的 条评论
为什么被折叠?



