您的位置:首页 > 其它

输入一个正整数数组,将它们连接起来排成一个数,输出能排出的所有数字中最小的一个

2013-09-12 00:05 609 查看
题目:输入一个正整数数组,将它们连接起来排成一个数,输出能排出的所有数字中最小的一个。例如输入数组{32,321},则输出这两个能排成的最小数字32132。请给出解决问题的算法,并证明该算法。



importjava.util.Arrays;
importjava.util.Comparator;

publicclassMinNumFromIntArray{

/**
*Q68输入一个正整数数组,将它们连接起来排成一个数,输出能排出的所有数字中最小的一个。
*例如输入数组{32,321},则输出这两个能排成的最小数字32132。请给出解决问题的算法,并证明该算法。
*/
publicstaticvoidmain(String[]args){
int[][]val={
{32,321},//32132
{532,45,78},//4553278
{2,23,231},//223123
{2,3,1},//123
};
for(int[]x:val){
//solution1
Stringresult=minNumFromIntArray(x);
System.out.println(result);
//solution2
AuxClassminStr=newAuxClass();
minNumFromIntArray2(x,0,x.length-1,minStr);
System.out.println(minStr.str);
}

//System.out.println("32".compareTo("321"));//<0
}

/*solution1:
*ifab<ba,thena<b
*1.sorttheintegerarray.thecomparatoris"ifab<ba,thena<b"
*2.appendeachintegerinthearraytocreateastringandthat'stheresult.
*/
publicstaticStringminNumFromIntArray(int[]x){
String[]strs=stringsOf(x);
Arrays.sort(strs,newComparator<String>(){
publicintcompare(Stringo1,Stringo2){
return(o1+o2).compareTo(o2+o1);
}
});
StringBuildersb=newStringBuilder();
for(Stringeach:strs){
sb.append(each);
}
returnsb.toString();
}

//int[]toString[].Forcomparing.
publicstaticString[]stringsOf(int[]x){
intlen=x.length;
String[]strs=newString[len];
for(inti=0;i<len;i++){
strs[i]=""+x[i];
}
returnstrs;
}

/*solution2
*getallthepermutations.
*findthemin.
*OfcourseweuseStringinsteadofBigInteger.
*/
publicstaticvoidminNumFromIntArray2(int[]x,intfirst,intlast,AuxClassminStr){
if(first==last){
StringBuildersb=newStringBuilder();
for(inteach:x){
sb.append(each);
}
if(minStr.str==null){
minStr.str=sb.toString();
}else{
if(minStr.str.compareTo(sb.toString())>0){
minStr.str=sb.toString();
}
}
return;
}
for(inti=first;i<=last;i++){
swap(x,first,i);
minNumFromIntArray2(x,first+1,last,minStr);
swap(x,first,i);
}
}
publicstaticvoidswap(int[]x,inti,intj){
inttemp=x[i];
x[i]=x[j];
x[j]=temp;
}

/*
*whenyouuse'String'insteadofinnerclass,youget'null'allthetime
*/
staticclassAuxClass{
Stringstr;
}
}
本文转自:http://bylijinnan.iteye.com/blog/1440004



                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐