有一个字符串“集合a”
列出它所有的不颠倒顺序的子集合
它的子集合有:


a
集合
集a
和a
集合a求助大家帮忙列下思路~若有代码或伪代码就谢谢了,最好是通用的方法谢谢各位

解决方案 »

  1.   

    ………………这么简单,两个for循环嵌套应该就够了
    懒得写,坐等答案
      

  2.   

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

  3.   

    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);
    }
    按5楼的思路稍微实现了一下,不算好,期待更好的方法
      

  4.   


    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);
    }刚代码没发全