编写一个方法,返回某集合的所有子集

ArrayList<ArrayList<Integer>> getSubsets(ArrayList<Integer> set,int index)

{

ArrayList<ArrayList<Integer>> allsubsets;

if(set.size()==index)//终止条件,加入空集合

{

allsubsets= new ArrayList<ArrayList<Integer>>();

allsubsets.add(new ArrayList<Integer>());//空集合

}

else

{

allsubsets=getSubsets(set,index+1);

int item=set.get(index);

ArrayList<ArrayList<Integer>> moresubsets=new ArrayList<ArrayList<Integer>>();

for(ArrayList<Integer> subset:allsubsets)

{

ArrayList<Integer> newsubset=new ArrayList<Integer>();

newsubset.addAll(subset);

newsubset.add(item);

moresubsets.add(newsubset);

}

allsubsets.addAll(moresubsets);

}

return allsubsets;

}

ArrayList<ArrayList<Integer>> getSubsets2(ArrayList<Integer> set)

{

ArrayList<ArrayList<Integer>> allsubsets=new ArrayList<ArrayList<Integer>>();

int max=1<<set.size();//计算2^n;

for(int k=0;k<max;k++)

{

ArrayList<Integer> subset=convertIntToSet(k,set);

allsubsets.add(subset);

}

return allsubsets;

}

ArrayList<Integer> convertIntToSet(int x,ArrayList<Integer> set)

{

ArrayList<Integer> subset=new ArrayList<Integer>();

int index=0;

for(int k=x;k>0;k>>=1)

{

if((k & 1)==1)

{

subset.add(set.get(index));

}

index++;

}

return subset;

}

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2025-01-06 23:13:01

编写一个方法,返回某集合的所有子集的相关文章

javascript小实例,编写一个方法,实现从n-m个数中随机选出一个整数

别怪我是一个闷葫芦,没那么多花哨的语言,废话不多说,先说说小实例的要求: 编写一个方法,实现从n-m个数中随机选出一个整数,要求:传递的参数不足两个或者不是有效数字,返回[0-1]之间的随机数,需要解决n和m两个数大小问题,如果m<n,两个参数的值进行交换: 看到这个求随机数的小实例,相信很多人都会写,也写过很多相关的程序代码,所以,重要的知识点没有,旨在给初学者一些启发,大牛可略过! 既然是给初学者看的,那么我们就从最基本的东西一步一步的看,便于理解,先拆分一下要求吧: 1.求一个n-m的随机

习题4 编写一个方法method(),判断一个数能否同时被3和5整除

编写一个方法method(),判断一个数能否同时被3和5整除 首先编写一个方法method(),由于是判断,所以返回的数据类型应是波尔型,并且向主方法传一个整数类型的参数X public class Zhawo11 { } public static boolean method(int x){ } } 接下来在子方法里判断,如果能同同时被3和5整除,就返回true,否则返回false public class Zhawo11 { public static void main(String a

给定两个32位的整数N和M,以及表示比特位置的i和j。编写一个方法,将M插入到N中, * 使得M从N的第j位开始,到第i位结束

1 /* 2 * 给定两个32位的整数N和M,以及表示比特位置的i和j.编写一个方法,将M插入到N中, 3 * 使得M从N的第j位开始,到第i位结束,假定从j位到i位足以容纳M,也即是M=10011 4 * 那么j和i之间至少可以容纳5个数,假如,不可能出现j=3,i=2的情况,因为第三位和第二位之间放不下M 5 * 例如 6 * N=1000000000(1024) 7 * M=10011(19) 8 * i=2,j=6,输出10001001100 9 * 思路如下: 10 * 1.将N中的从

9.9递归和动态规划(四)——返回某集合的全部子集

/** * 功能:返回某集合的全部子集. */ 三种方法: 方法一:迭代 //迭代 /** * 注意:每次增加集合后会改变原来的集合,无法继续从集合中取出元素. * 必须通过一个中间參数moreSubsets来保存中间结果,最后增加allSubsets. * @author Lynne * @param set * @param index * @return */ public static ArrayList<ArrayList<Integer>> getSubsets2(Ar

9.9递归和动态规划(四)——返回某集合的所有子集

/** * 功能:返回某集合的所有子集. */ 三种方法: 方法一:迭代 //迭代 /** * 注意:每次加入集合后会改变原来的集合,无法继续从集合中取出元素. * 必须通过一个中间参数moreSubsets来保存中间结果,最后加入allSubsets. * @author Lynne * @param set * @param index * @return */ public static ArrayList<ArrayList<Integer>> getSubsets2(Ar

编写一个方法,输入DOM节点,返回包含所有父节点的一个数组

function getParentsNodes(element) { var parents = []; var getParentsNode = function (element) { if (element.parentNode) { parents.push(element.parentNode); getParentsNode(element.parentNode); } }; getParentsNode(element); return parents; }

一个方法返回多个值

public class TwoTuple<A,B>{   public final A a; public final B b; public TwoTuple(A a,B b){ this.a=a; this.b=b; } } 这样我们可以通过new TwoTuple(A,B)返回两个值. 原文在<Java编程思想>第四版,泛型章节P335

一个数组中只有一个数是只有唯一一个,其他都是三个的,编写一个方法查找出那个唯一的值

1 public class singleThree { 2 /* 3 * 如有数组A[]={2,2,3,2} 4 * 其二进制为 5 * 0 0 1 0 :2 6 * 0 0 1 0 :2 7 * 0 0 1 1 :3 8 * 0 0 1 0 :2 9 * 相加起来为 10 * 0 0 4 1 每一位除以3为 11 * 0 0 1 1 结果为3 12 * 当一个数和1进行与运算的时候只取最后一位 13 * 如0 0 1 1 & 0 0 0 1 结果为0 0 0 1 14 * 15 * 如上数组

编写一个方法,确定某字符串的所有排列组合

public static ArrayList<String> getPerms(String str) { if(str==null) return null; ArrayList<String> permutations=new ArrayList<String>(); if(str.length()==0)//终止条件 { permutations.add(""); return permutations; } char first=str.c