实现一种算法,打印n对括号的全部有效组合(左右括号正确配对)
实例
输入:3
输出:()()(), (()()), ()(()), (())(), ((()))
递归求解:
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner scanner=new Scanner(System.in);
int a =scanner.nextInt();
System.out.println(name(a ));
}
public static HashSet<String> name(int a) {
HashSet<String>hashSet=new HashSet<String>();
if (a==1) {
hashSet.add("()");
return hashSet;
}
HashSet<String>hashSet1 =name(a-1);
for (String string : hashSet1) {
hashSet.add("()"+string);
hashSet.add(string+"()");
hashSet.add("("+string+")");
}
return hashSet;
}
}
迭代求解
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner scanner=new Scanner(System.in);
int n=scanner.nextInt();
HashSet<String>hashSet=new HashSet<String>();
hashSet.add("()");
if (n==1) {
System.out.println(hashSet);
}
else {
for (int i = 2; i <= n; i++) {
HashSet<String>hashSet2=new HashSet<String>();
for (String e : hashSet) {
hashSet2.add(e+"()");
hashSet2.add("()"+e);
hashSet2.add("("+e+")");
}
hashSet=hashSet2;
}
System.out.println(hashSet);
}
}
}
递归跟迭代本质上并无太大区别,主要是理解每对括号的关系