本文共 1721 字,大约阅读时间需要 5 分钟。
问题描述:
给定一个非负整数形成的数组,对数组中的数组元素进行排列组合之后,产生一个最大的整数,返回结果。例如:给定一个非负数的整数数组 {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{ @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); }}
(完)
转载地址:http://zgvdi.baihongyu.com/