一道递归程序的设计题:
编写带有下面声明的例程:
public void permute(String str);
public void permute(char[] str, int low, int high);
第一个例程是个驱动程序,它调用第二个例程并显示String str中字符的所有排序。如果str是"abc",那么输出的串是abc,acb,bca,cab和cba。第二个例程使用递归

解决方案 »

  1.   

    public void permute(char[] str, int low, int high){
      System.out.println(new String(str));
      for(int i=low; i<=high; ++i){
        permute(str, i, high);
        str[low] <=> str[i];
        permute(str, i, high);
        str[low] <=> str[i];
      }
    }
    public void permute(String str){
      permute(str.toCharArray(), 0, str.length()-1);
    }
      

  2.   


    public class TestS {
    public static void main(String[] args) {

    String s="abc";
    char[] ch=s.toCharArray();
    char[] c=new char[3];
    for(int i=0;i<ch.length;i++) {
    c[0]=ch[i];
    for(int j=0;j<ch.length;j++) {
    c[1]=ch[j];
    for(int k=0;k<ch.length;k++) {
    c[2]=ch[k];
    if(i!=j&&i!=k&&j!=k) {
    for(int m=0;m<ch.length;m++) {
    System.out.print(c[m]);
    }
    System.out.println();
    }
    }
    }
    }
    }}
      

  3.   

    1楼那个<=>是什么咯??
    学了JAVA这么久,没见过有这么个符号...
      

  4.   

    答:代码:
    public class OuterA {
    static char[] data=null;
    static int pos=-1;

    public void permute(String str){
    data=new char[str.length()+1];
    permute(str.toCharArray(),0,str.length()-1);
    }

    public void permute(char[] str, int low, int high){
    if(low>high){//已找到一个结果
    System.out.println(new String(data,0,pos+1));
    return;
    }
    pos++;
    for(int i=low;i<=high;i++)
    {
    char t=str[i];
    str[i]=str[low];
    str[low]=t;
    data[pos]=str[low];
    permute(str,low+1,high);//递归
    t=str[i];
    str[i]=str[low];
    str[low]=t;
    }
    pos--;
    }

    public static void main(String[] args) {
    // TODO Auto-generated method stub
    new OuterA().permute("abcd");
    }

    }
    程序运行结果:
    abcd
    abdc
    acbd
    acdb
    adcb
    adbc
    bacd
    badc
    bcad
    bcda
    bdca
    bdac
    cbad
    cbda
    cabd
    cadb
    cdab
    cdba
    dbca
    dbac
    dcba
    dcab
    dacb
    dabc
      

  5.   

    和楼上一个原理    public void permute(char[] str, int low, int high) {
            if (low >= high) {
                System.out.println(new String(str));
                return;
            }
            for (int i = low; i < high; i++) {
                char c = str[low];
                str[low] = str[i];
                str[i] = c;
                permute(str, low + 1, high);
                c = str[low];
                str[low] = str[i];
                str[i] = c;
            }
        }    public void permute(String str) {
            permute(str.toCharArray(), 0, str.length());
        }