请问是否有关求一个数字集合的所有排列,程序中有一部分需要用到这个功能,不知道有什么算法没有?如果有代码更好了?我希望学习一下,根据需要自己再编程实现!谢谢!

解决方案 »

  1.   

    排列组合算法吗?
    import java.math.*;
    import java.util.*;public class Arrange{ private int[] index;//用于存储需要全排列的数组的下标的成员变量。
    private int n;//表示待排数组的元素个数。
    private long numLeft;//用于存储剩余排列序列个数的成员变量。
    private long total;//用于存储排列序列总数的成员变量。

    public Arrange(int n){
    this.n=n;
    reset();//调用重置
    }

    public void reset(){
    //初始化数组index。
    index=new int[n];
    for(int i = 0; i < index.length; i++){
    index[i] = i;
    }

    //初始化numLeft,开始时numLeft应该为n!.
    total=1;
    for(int i = n;i>1;i--){
    total*=i;
    }
    numLeft=total;
    } //判断是否排序结束
    public boolean hasMore(){
    return numLeft > 0;
    }
    //得到下一个排列序列
    public int[] getNext(){ if (numLeft==total){
    numLeft -=1;
    return index;
    } int j = index.length - 2;
    while (index[j] > index[j + 1]){
    j--;
    } int k = index.length - 1;
    while (index[j] > index[k]){
    k--;
    }

    int temp;
    temp = index[k];
    index[k] = index[j];
    index[j] = temp;  int r = index.length - 1;
    int s = j + 1; while (r > s){
    temp = index[s];
    index[s] = index[r];
    index[r] = temp;
    r--;
    s++;
    } numLeft-=1;
    return index; }
    }
      

  2.   

    我的也是从csdn上下的  你自己去找找下完整的public class TryArrange{
    public static void main(String args[]){

    System.out.println("对整数数组进行全排列");
    int[] intArray=new int[3];
    for(int i=0;i<intArray.length;i++){
    intArray[i]=i+1;
    }

    Arrange intArrange=new Arrange(intArray.length);
    while(intArrange.hasMore()){
    int[] index=intArrange.getNext();
    for(int i=0;i<intArray.length;i++){
    System.out.print(intArray[index[i]]+" ");
    }
    System.out.println();
    }

    System.out.println("对字符数组进行全排列");
    String str="abc";
    char[] chArray=str.toCharArray();

    Arrange strArrange=new Arrange(chArray.length);
    while(strArrange.hasMore()){
    int[] index=strArrange.getNext();
    for(int i=0;i<chArray.length;i++){
    System.out.print(chArray[index[i]]+" ");
    }
    System.out.println();
    }
    }