题目描述
数字 n
代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且 有效的 括号组合。
思路:
深度优先加回溯,达到目标长度时才判断括号是否合法,
(不知道层数明显需要采用回溯,当到达n时判断括号序列是否有效,有效则添加)
代码
public static List<String> generateParenthesis(int n) {
//Stack<String> stack = new Stack<>();
List<String> list=new ArrayList<>();
String stack = "";
String s = "";
fun(list,n,n,s);
return list;
}
public static void fun(List<String > list,int l,int r,String s){
if(l==0&&r==0){
if(isValid(s))list.add(s);
return;
}
if(!(l>=0&&r>=0))return;
fun(list,l-1,r,s+"(");
fun(list,l,r - 1,s + ")");
}
public static boolean isValid(String s){
Stack<String> stack = new Stack<>();
for (int i = 0; i < s.length(); i++) {
if(s.charAt(i)=='('){
stack.push("(");
}else{
if(stack.isEmpty()||stack.peek()!="(") return false;
else stack.pop();
}
}
if(stack.isEmpty())return true;
else return false;
}