如果输出aaa呢?是只输出一个aaa吗?也就是说去掉重复的?

解决方案 »

  1.   

    用递归实现的:           static List arrange(String s){
    if ((s==null)||(s.length()==0)) throw new IllegalArgumentException();
    int len=s.length();

    List list=new ArrayList();
    if(len==1) { 
    list.add(s); 
    return list;
    } char c=s.charAt(0);
    List temp=arrange(s.substring(1));
    StringBuffer sb=new StringBuffer(len);
    for(int i=0;i<temp.size();i++){
    for(int j=0;j<len;j++){
    sb.setLength(0);
    sb.append((String)temp.get(i));
    sb.insert(j,c);
    list.add(sb.toString());
    }
    }
    return list;
    }
      

  2.   

    如果有10个字符我运行时就 OutOfMemoryError了.
    效率比较差
      

  3.   

    to:treeroot(根根)
    你测试这个方法的原代码可以让我看一下吗?谢谢我测试的时候总是出错,哎!!~~~~~~~~~~
      

  4.   

    真呀晕,除了没有倒入java.util.*;之外我实在想不出怎么会出错。
    只要会写HelloWorld就没有问题
      

  5.   

    //算法就是treeroot(根根)的
    //Pailie.java
    import java.util.*;
    import java.io.*;public class Pailie
    { static List arrange(String s)
    {
    if ((s==null)||(s.length()==0)) throw new IllegalArgumentException();
    int len=s.length();

    List list=new ArrayList();
    if(len==1) { 
    list.add(s); 
    return list;
    } char c=s.charAt(0);
    List temp=arrange(s.substring(1));
    StringBuffer sb=new StringBuffer(len);
    for(int i=0;i<temp.size();i++){
    for(int j=0;j<len;j++){
    sb.setLength(0);
    sb.append((String)temp.get(i));
    sb.insert(j,c);
    list.add(sb.toString());
    }
    }
    return list;
    }

    public static void main(String[] args) throws IOException
    {
    BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
    System.out.print("Please input a string:");
    String str=br.readLine();
    List l=arrange(str);
    for(int i=0;i<l.size();i++)
    {
    System.out.println(l.get(i));
    }
    }
    }