算法实现:
输入一个正整数数组,然后输出该数组中所有数字组成的最大数。
例如,[7,5,9,556,89,11]最大数为9897556511
算法思想:
对数组按照自定义规则进行排序,在java中,我们可以使用Arrays.sort()方法,并且通过接口Comparator重新编写排序的规则。
排序规则:
数字位数相同比较两个数的第一位,谁大谁在前,要是第一位相同就比较第二位,依次类推。
数字位数不同就先补位,使两个数字位数相同。然后比较。如:7和778比较,使7补位为777,再比较。
代码:
public class Algorithm3 {
public String test(int num[]){
String[] str = new String[num.length];
int i = 0;
for(int n : num){
str[i++] = n + "";
}
Arrays.sort(str,new Comparator<String>(){
@Override
public int compare(String o1, String o2) {
// TODO 自动生成的方法存根
int length1 = o1.toCharArray().length;//数字的位数
int length2 = o2.toCharArray().length;
StringBuilder s1 = new StringBuilder();//补位的数字
StringBuilder s2 = new StringBuilder();
//补位方法
for(int i=0;i<length2;i++){
s1.append(o1);
}
for(int i=0;i<length1;i++){
s2.append(o2);
}
return s2.toString().compareTo(s1.toString());
}
});
StringBuilder s = new StringBuilder();
for(String s3 : str){
s.append(s3);
}
return s.toString();
}
public static void main(String[] args){
int number[] = {7,5,9,556,89,11};
System.out.println("排序数组为:");
for(int n : number){
System.out.print(n + " ");
}
System.out.println("");
Algorithm3 t = new Algorithm3();
System.out.println("最大数为:" + t.test(number));
}
}
结果:
排序数组为:
7 5 9 556 89 11
最大数为:9897556511