CSDN算法版关于排列与组合的贴子多得可以用来砌长城了。去搜下吧。先转篇给你。http://expert.csdn.net/Expert/topic/2495/2495045.xml?temp=.9805719

解决方案 »

  1.   

    这是一个常见的递归问题。递归:就是利用程序嵌套调用的原理完成有规律且工程的后一项
    依赖前面的结果进行的工作。上面的问题你可以这样理解:这是一个1 2 3 4 5这些数字按照
    不同的顺序排列(在离散数学里面是错排问题)。这个问题的解决方法就是利用递归,例如:1)2)3)4)5
    每个括号表示一个层次,你只要调用函数swap将数列分组进行交换即可,在方法最里层是将最内部的两个数交换,以次将里面的两个数作为一组然后与倒数第3个交换,如此下去,这就是算法描述
    下面是java算法(针对字母的排序):
    import java.io.System.*;
    //^^^^^^^^^^^^^主程序
    public void anagram(String word){
     int numofChar=word.length();
     if(numofChar==1){
       System.out.println(word);
    }
     else{
       for(int i=1;i<=numofChar;i++){    char firstLetter=word.charAt(0);
        
        suffix=word.substring(1,numofChar);    anagram(suffix);//递归调用    word=suffix+firstLetter;}
      

  2.   

    to fishstudio() :
                能给出代码吗?上面的还不对啊!!!
         你想:
                有123,
                        你的程序结果为 
                                    23451
                                    34512
                                    45123
                                    51234
                                    12345
    按排列组合来考虑,应有5*4*3*2*1(120)种情况,(当然包括13452-25431这种情况)
    递归时应有:
                 eg:123
                          23               32
                          123  213 231     132 312 321
    ///////////////////////////////////////////////////////
    那位有代码,能贴出来吗?谢谢
         
      

  3.   

    public class test{
       static int size=0;
       public static void permutation(int[] a){
           _permutation(a,0);
       }
       public static void _permutation(int[] a,int i){
      if(i==a.length-1){
         size++;
         print(a);
      }
      for(int j=i;j<a.length;j++){
          swap(a,i,j);
          _permutation(a,i+1);
          swap(a,i,j);
      }
    }
    public static void swap(int[] a,int i,int j){
        if(i!=j){
           int temp=a[i];
           a[i]=a[j];
           a[j]=temp;
        }
    }
    private static void print(int[] a){
       for(int i=0;i<a.length;i++)
         System.out.print(a[i]+" ");
       System.out.println();
    }
    public static void main(String[] args){
       int[] a={1,2,3,4,5};
       permutation(a);
       System.out.println("total possibilities: "+size);
    }
    }