首页 > 代码库 > 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