题目:思路:
“逐步生成结果类”问题之非数值型:
这时就要用容器去装了。所谓迭代就是生成一点装一点。
此题代码:
import java.util.HashSet;
import java.util.Set;
public class 合法括号 {
public static void main(String[] args) {
合法括号 a=new 合法括号();
Set<String> n=a.f1(3);
Set<String> m=a.f2(3);
System.out.println(n);
System.out.println(m);
}
//用递归
public static Set<String> f1(int n){
//set集合可以去重
Set<String> s_n=new HashSet<String>();
if(n==1) {//出口
s_n.add("()");
return s_n;
}
Set<String> s_n_1=f1(n-1);
for(String e_n_1:s_n_1) {
s_n.add("()"+e_n_1);//添左
s_n.add(e_n_1+"()");//添右
s_n.add("("+e_n_1+")");//添外
}
return s_n;
}
//用迭代
public static Set<String> f2(int n){
Set<String> res=new HashSet<String>();//保持迭代状态
res.add("()");
if(n==1) {
return res;
}
for(int i=2;i<=n;i++) {
Set<String> res_new=new HashSet<String>();
for(String e:res) {
res_new.add("()"+e);
res_new.add(e+"()");
res_new.add("("+e+")");
}
res=res_new;
}
return res;
}
}