首页 > 代码库 > Largest Number
Largest Number
Given a list of non negative integers, arrange them such that they form the largest number.
For example, given [3, 30, 34, 5, 9]
, the largest formed number is 9534330
.
Note: The result may be very large, so you need to return a string instead of an integer.
public class Solution { public String largestNumber(int[] num) { int n = num.length; if (n < 1) return ""; //把数组转化为字符串数组 String[] strs = new String[n]; for (int i = 0; i < n; i++) { strs[i] = String.valueOf(num[i]); } //按照数字在结果中的位置排序 Arrays.sort(strs, new Cmp()); //把所有字符串拼接在一起 String ans = ""; for (int i = n - 1; i >= 0; i--) { ans = ans.concat(strs[i]); } //去掉数字开头的0,如输入[0, 0] int i = 0; while (i < n && ans.charAt(i) == '0') { i++; } if (i == n) return "0"; return ans; } //比较方法很简单:如果[a在前b在后]组成的结果大于[b在前a在后]组成的结果,那么a>b。 class Cmp implements Comparator<String>{ @Override public int compare(String a, String b) { String ab = a.concat(b); String ba = b.concat(a); return Integer.parseInt(ab) - Integer.parseInt(ba); } } }
真是把Arrays.sort()用绝了,自己也想到了排序,以及使用ab,ba这样的比较形式,就是写不出来这个排序方法,然后就是各种尝试方法,1,改进基数排序,2,将每个数都变成等长的,但是都太啰嗦,而且写着就晕了,这个比较器太好了!!!
http://blog.csdn.net/ljiabin/article/details/42676433
java.util.Arrays
此类包含用来操作数组(比如排序和搜索)的各种方法。此类还包含一个允许将数组作为列表来查看的静态工厂。
static int binarySearch(byte[] a, byte key)
使用二分搜索法来搜索指定的 byte 型数组,以获得指定的值。
static int binarySearch(byte[] a, int fromIndex, int toIndex, byte key)
使用二分搜索法来搜索指定的 byte 型数组的范围,以获得指定的值。
在这里,byte[] 可以使int[],String[],float[],double,short[],long[],Object[],char[],key改成相应的类型
static boolean[] copyOf(boolean[] original, int newLength)
(深度复制)
复制指定的数组,截取或用 false 填充(如有必要),以使副本具有指定的长度。
static boolean[] copyOfRange(boolean[] original, int from, int to)
将指定数组的指定范围复制到一个新数组。
static boolean equals(boolean[] a, boolean[] a2)
如果两个指定的 boolean 型数组彼此相等,则返回 true。
static void fill(boolean[] a, boolean val)
将指定的 boolean 值分配给指定 boolean 型数组的每个元素。
static void fill(boolean[] a, int fromIndex, int toIndex, boolean val)
将指定的 boolean 值分配给指定 boolean 型数组指定范围中的每个元素
static void sort(byte[] a)
对指定的 byte 型数组按数字升序进行排序。
static void sort(byte[] a, int fromIndex, int toIndex)
对指定 byte 型数组的指定范围按数字升序进行排序。
static void sort(T[] a, Comparator<? super T> c)
根据指定比较器产生的顺序对指定对象数组进行排序。
static <T> void sort(T[] a, Comparator<? super T> c)
根据指定比较器产生的顺序对指定对象数组进行排序。
static String toString(boolean[] a)
返回指定数组内容的字符串表示形式。
Largest Number