合法括号组合
问题描述
实现一种算法打印n对括号的全部组合(括号要求匹配)
例如,n = 3时,输出()()(), (()()), ()(()), (())(), ((()))
import java.util.HashSet;
public class 括号组合 {
public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.println(f2(3));
}
private static HashSet<String> f(int n) {
HashSet<String> s_n = new HashSet<>();
if (n == 1) {
s_n.add("()");
return s_n;
}
HashSet<String> s_n_1 = f(n - 1);
for (String string : s_n_1) {
s_n.add("()" + string);
s_n.add(string + "()");
s_n.add("(" + string + ")");
}
return s_n;
}
private static HashSet<String> f2(int n) {
HashSet<String> s_n = new HashSet<>();
s_n.add("()");// 初始化
for (int i = 1; i < n; i++) {
HashSet<String> temp = new HashSet<>();
for (String string : s_n) {
temp.add("()" + string);
temp.add(string + "()");
temp.add("(" + string + ")");
}
s_n = temp;
}
return s_n;
}
}