本帖最后由 王双宝 于 2012-7-12 17:33 编辑
王双宝 发表于 2012-7-12 16:43
这个问题最核心的就是对一个数列进行全排列,如有x1、x2、x3(两两不相等)的一个数组,分别代表百位、十位 ...
以下是完整代码,没有时间写注释了,下班了,给分哦。
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Set;
public class Main {
public static void main(String[] args){
List<Integer> list=getList(3,1,0,2,3);
for(Integer a : list){
System.out.println(a.intValue());
}
}
/**
*
* @param array 传入的数字数组
* @param m 从array中选中m个
* @return
*/
public static List<Integer> getList(int m, int ...array){
Arrays.sort(array);
Set<String> set=new HashSet<String>();
while(null!=array){
set.add(arrayToString(array).substring(0,3));
array=sequence(array);
}
List<Integer> list=new ArrayList<Integer>();
Iterator<String> it=set.iterator();
while(it.hasNext()){
String str=it.next();
Integer integer=Integer.parseInt(str);
int min=(int) Math.pow(10,m-1);
if(integer>=min){
list.add(integer);
}
}
return list;
}
public static int[] sequence(int[] array){
int i=-1;
int j=-1;
int index=array.length-1;
for(;index>=1;index--){
if(array[index-1]<array[index]){
i=index;
break;
}
else{
continue;
}
}
if(i==-1){
return null;
}
index=array.length-1;
for(;index>=i;index--){
if(array[i-1]<array[index]){
j=index;
break;
}
else{
continue;
}
}
int m=array[i-1];
array[i-1]=array[j];
array[j]=m;
int[] newarray=new int[array.length-i];
for(int index1=0,index2=array.length;index1<newarray.length;index1++,index2--){
newarray[index1]=array[index2-1];
}
for(int index4=i,index5=0;index4<array.length;index4++,index5++){
array[index4]=newarray[index5];
}
return array;
}
public static String arrayToString(int[] array){
String str="";
for(int i=0;i<array.length;i++){
str+=array;
}
return str;
}
}
运行结果:
203
132
210
302
301
213
123
230
201
312
310
320
321
231
120
103
102
130 |