集合a----列出它所有的不颠倒顺序的子集合

因为要顺序不乱----换一种思路就是这些字符总是在原来的位置, 位置不换,但是是显示和不显示

如果字符集合不长的话,根据“选和不选”的01效果。考虑下这个思路得行不?
比如5个字符的"abcde":
设定二进制11111为整体的abcde
所有顺序集合就是
00001---e
00010---d
00011---de
00100---c
00101---ce
.....
也就是说从00001开始到11111的二进制你都走一遍,无重复,不漏元素。


public class TestSort {

    /**
     * @param args
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub

        String a="集合a";
        char[] b=a.toCharArray();
        sort(b);


    }

    private static void sort(char[] b) {
        // TODO Auto-generated method stub
        int m=b.length-2;
        long n=(2<<m);
        String str="";
        for(int i=0;i<b.length;i++){
            str+="1";
        }

       
        long l=Integer.parseInt(str, 2);
        char[] buff;
        for(;l>0;l--){
            long x=n;
            buff=new char[b.length];
            int w=0,v=0;
            while(x>=1){
               
                if((l&x)==x){
                    buff[v]=b[w];
                    v++;
                }
                x=x>>1;

                w++;
            }
            printBuffer(buff);
        }
       
       
       
       
    }

    private static void printBuffer(char[] buff) {
        // TODO Auto-generated method stub
        String str="";
        for(int i=0;i<buff.length;i++){
            str+=""+buff[i]+"";
        }

        System.out.println(str);
    }

你可能感兴趣的:(C++,c,C#)