求解最大数问题
问题描述:
给定一个非负整数形成的数组,对数组中的数组元素进行排列组合之后,产生一个最大的整数,返回结果。
例如:给定一个非负数的整数数组 {3, 30, 34, 5, 9},能够组合成的最大整数为:9534330。
注意:返回的结果使用字符串表示,因为数值很大,可能会超出整数的表示范围。
算法设计:
这里会用到JAVA SE8 中的 Comparator接口。Comparator 是比较器;我们若需要控制某个类的次序,可以建立一个 “该类的比较器” 来进行排序。
package com.bean.basic;
import java.util.Arrays;
import java.util.Comparator;
public class LargestNumberDemo {
/*
* 定义一个内部类 LargeNumberComparator,实现Comparator接口,重写了compare方法。
* */
private static class LargerNumberComparator implements Comparator<String> {
@Override
public int compare(String a, String b) {
String order1 = a + b;
String order2 = b + a;
return order2.compareTo(order1);
}
}
/*
* 构造最大数的算法
* */
public static String largestNumber(int[] nums) {
// Get input integers as strings.
String[] asStrs = new String[nums.length];
for (int i = 0; i < nums.length; i++) {
asStrs[i] = String.valueOf(nums[i]);
}
// Sort strings according to custom comparator.
Arrays.sort(asStrs, new LargerNumberComparator());
// If, after being sorted, the largest number is `0`, the entire number
// is zero.
if (asStrs[0].equals("0")) {
return "0";
}
// Build largest number from sorted array.
String largestNumberStr = new String();
for (String numAsStr : asStrs) {
largestNumberStr += numAsStr;
}
return largestNumberStr;
}
public static void main(String[] args) {
// TODO Auto-generated method stub
int[] arrayDemo= {3, 30, 34, 5, 9 };
String ANSWER = largestNumber(arrayDemo);
System.out.println("ANSWER = "+ANSWER);
}
}
(完)