面試題45:把數組排列成最小的數
題目要求:
輸入一個正整數數組,把數組里所有數字拼接起來排成一個數,使其為所有可能的拼接結果中最小的一個。例如輸入{3,32,321},則輸入321323。
解題思路:
此題需要對數組進行排序,關鍵點在于排序的規則需要重新定義。我們重新定義“大于”,“小于”,“等于”。如果a,b組成的數字ab的值大于ba,則稱a"大于"b,小于與等于類似。比如3與32,因為332大于323,因此我們稱3“大于”32。我們按照上述的“大于”,“小于”規則進行升序排列,即可得到題目要求的答案。
package chapter5;
import java.util.Arrays;
import java.util.Comparator;
/**
* Created with IntelliJ IDEA
* Author: ryder
* Date : 2017/8/3
* Time : 10:13
* Description:把數組排成最小的數
**/
public class P227_SortArrayForMinNumber {
public static void printMinNumber(int[] data){
if(data==null||data.length==0)
return;
for(int i=0;i<data.length-1;i++){
for(int j=0;j<data.length-1-i;j++){
if(bigger(data[j],data[j+1])){
int temp = data[j];
data[j] = data[j+1];
data[j+1] = temp;
}
}
}
for(int item:data){
System.out.print(item);
System.out.print(" ");
}
System.out.println();
}
//if a>=b return true
public static boolean bigger(int a,int b){
String temp1 = a+""+b;
String temp2 = b+""+a;
if(temp1.compareTo(temp2)>0)
return true;
else
return false;
}
public static void main(String[] args){
printMinNumber(new int[]{3,32,321});
}
}
運行結果
321 32 3