利用移位运算求解子集

    xiaoxiao2021-03-25  136

    最近在学习了移位操作符后,利用移位轻松的解决了求一个集合的所有 子集的问题。 如一个子集为ac,则相应的二进制码为1010,依次判断每一位,若该位为1,则取相应的元素;

    public class Collection01{ public static void main(String[] args){ String[] str={"a","b","c","d"}; int len=str.length; //计算共有多少个子集 for(int i=0;i<(1<<len);i++){ System.out.println("{"); //遍历集合 for(int j=0;j<len;j++){ int b=i; //判断集合元素相应的位置上是否有元素 if(1==(b&1)){ System.out.print(str[j]); } //右移一位,始终判断最后一位元素 b>>=1; } System.out.println("}"); } } } 第二种方法: public class Collection02{ public static void main(String[] args){ String[] str={"a","b","c","d"}; int len=str.length; //存储所有子集的大集合 ArrayList<HashSet<String>> list=new ArrayList<>(); for(int i=0;i<(1<<len);i++){ //存储每个小子集 HashSet<String> set=new HashSet<>(); for(int j=0;j<(1<<len);j++){ int num=i; if(num&1){ set.add(str[j]) } num>>=1; } list.add(set); } //遍历集合 for(HashSet<String> x:list){ System.out.println(x.toString()); } } }
    转载请注明原文地址: https://ju.6miu.com/read-24725.html

    最新回复(0)