排列组合算法吗? 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; } }
我的也是从csdn上下的 你自己去找找下完整的public class TryArrange{ public static void main(String args[]){
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; }
}
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();
}
}