比如:
char a={'A','B','C'},要求输出结果为:
A,B,C,AB,AC,BC,ABC注:AB和BA属于同一个,对顺序无要求.希望大家帮帮忙想一下,我想了好久想不出来,如果大家用递归,最好能够讲一下,因为俺对递归反应很迟钝,谢谢!

解决方案 »

  1.   

    怎么搜?
    在百度没搜着,如果CSDN有的话百度应该可以搜到
      

  2.   


    void combine(String str){
    int length=str.length();
    char[] in=str.toCharArray();
    StringBuffer out=new StringBuffer(); allCombine(in,out,length,0,0);
    }
    void allCombine(char[] in,StringBuffer out,int length,int sign,int start){
    for(int i=start;i<length;i++){
    out.append(in[i]);
    System.out.println(out);
    if(i<length-1){
    allCombine(in,out,length,sign+1,i+1);
    }
    out.setLength(out.length()-1);
    }
    }向输出字符串中的当前位置添加一个字符
    剩下的字符继续这样操作
      

  3.   

    这个强,看了好久才明白,不过sign是废字段功能和start一样.不知道evilmars弄这个字段干嘛
      

  4.   

    补充一下,其实length这个字段也可以不用传的.void combine(String str) {
    char[] in = str.toCharArray();
    StringBuffer out = new StringBuffer();
    allCombine(in, out, 0);
    }void allCombine(char[] in, StringBuffer out, int start) {
    for (int i = start; i < in.length; i++) {
    out.append(in[i]);
    System.out.println(out);
    if (i < in.length - 1) {
    allCombine(in, out, i + 1);
    }
    out.setLength(out.length() - 1);
    }
    }这样楼主能更好理解了
      

  5.   

    三楼的方法没排全啊
    import java.util.*;
    import java.io.*;
    public class TestT{
      public static void main(String[] args)throws Exception{
        String [] array=new String[]{"A","B","C","D"};
        listAll(Arrays.asList(array),"");}public static void listAll(List candidate,String prefix){
             System.out.println(prefix);
             for(int i=0;i<candidate.size();i++){
              List temp =new LinkedList(candidate);
              listAll(temp,prefix+temp.remove(i));
            }
      }
    }
      

  6.   

    谁能解释一个out.setLength(out.length()-1)到底是实现什么功能啊
    我知道是把out清空,然后再重新开始,但是还是有点转不过弯来~