package 算法;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;
import com.sun.corba.se.spi.ior.MakeImmutable;
public class subSet {
public static void main(String[] args) {
Set<String> set = new HashSet<String>();
set.add("A ");
set.add("B ");
set.add("C ");
set.add("D ");
set.add("E ");
subSet make = new subSet();
set = make.makeSubSet(set);
//输出自己的信息
Iterator< String> ite = set.iterator();
int i = 0;
while(ite.hasNext()){
i++;
System.out.println(i+"\t{"+ite.next()+"} ");
}
}
//makeSubSet构造自己的set并返回
public Set makeSubSet(Set set){
//中间Set,由于set不能同时使用迭代器和直接在set上进行增加和删除操作,
//所以,使用它来作为一个中转站
Set res = new HashSet<String>();
//为空的情况下直接空格,用于空子集
if(set.isEmpty()){
res.add(" ");
return res;
}//end if
//其他情况
else{
//删除一个元素
Iterator< String> ite = set.iterator();
String content = ite.next();
set.remove(content);
set = makeSubSet(set);
for(Object s: set){
res.add( (String)s );
}
//在递归返回之后,根据返回的上一个子集的集合,生成子集
Iterator< String > ite2 = res.iterator();
String result;
while(ite2.hasNext()){
result = ite2.next();
set.add(result+" "+content);
}
return set;
}//end else
}//end method makeSubSet
}
package 算法;
import java.util.Arrays;
/*
* 列出置换:给定一个数组列出所有的置换
* 递归
*/
public class ZhiHuan {
public static void main(String[] args) {
String [] str = {"A","B","C","E"};
ZhiHuan zhihuan = new ZhiHuan();
zhihuan.stat(str);
}
//置换算法
public void zhiHuan(Object[] arr,int index ){
if(index == arr.length -1){
System.out.print(Arrays.toString(arr)+" ");
}
else{
zhiHuan(arr, index+1);
for(int i = index+1 ; i < arr.length; i++ ){
//交换元素idex与后面的每一个元素
Object temp = arr[index];
arr[index] = arr[i];
arr[i] = temp;
zhiHuan(arr, index+1);
}
}
}
//驱动
public void stat(Object[] arr){
zhiHuan(arr, 0);
}
}