生成子集以及置换

来源:互联网 发布:python课程推荐 编辑:程序博客网 时间:2024/06/05 06:58
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);}}


0 0
原创粉丝点击