题目:
输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。
思路:
1、数组中所有的数拼接后有可能会超过整数的范围,因此本题必须要使用字符串来处理;
2、两个数字m和n能拼接成数字mn和数字nm,如果mn<nm那么说明m应该排在n前面,我们应该打印出mn;反之,如果nm<mn,我们定义n小于m.r如果mn=nm,则表示m和n大小相等;
3、常用Java中,compareTo函数进行两个字符串的比较,返回一个int型。
程序:
public class subject32 {
public static String PrintMinNumber(int[] numbers) {
String str = new String();
if(numbers.length == 0 || numbers == null)
return str;
for(int i = 0; i < numbers.length; i ++) {
for(int j = i + 1; j < numbers.length; j ++) {
//只要与String进行+操作后,所以类型都变成了String类型,再进行连接
if((numbers[i] + "" + numbers[j]).compareTo((numbers[j] + "" + numbers[i])) > 0) {
int num = numbers[i];
numbers[i] = numbers[j];
numbers[j] = num;
}
}
}
for(int i = 0 ; i < numbers.length; i ++) {
str += numbers[i];
}
return str;
}
public static void main(String args[]) {
int[] array = new int[] {3,32,321};
System.out.println(PrintMinNumber(array));
}
}