[LintCode/LeetCode] Largest Number [Comparator的使用]

416 查看

Problem

Given a list of non negative integers, arrange them such that they form the largest number.

Example

Given [1, 20, 23, 4, 8], the largest formed number is 8423201.

Note

先将nums[]转化为String[],否则无法使用Comparator,其实转为Integer[]也可以,这里用String为例。
然后就是最关键的一步:创造一个Comparator,用以从大到小排列所有的strs[]元素。注意:return (s2+s1).compareTo(s1+s2); 这里的顺序不能变。
再将排列好的str[i]元素放入一个StringBuilder sb里,然后将sb转化为String result

如果这个result的第一个字符是0,那么我们不希望看到返回一个类似“000000000”的字符串,只要返回单字符的字符串"0"就可以了。
否则,返回result

Solution

public class Solution {
    public String largestNumber(int[] nums) {
        String[] strs = new String[nums.length];
        for (int i = 0; i < nums.length; i++) {
            strs[i] = Integer.toString(nums[i]);
        }
        Arrays.sort(strs, new Comparator<String>(){
            public int compare(String s1, String s2) {
                return (s2 + s1).compareTo(s1 + s2);
            }
            });
        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < strs.length; i++) {
            sb.append(strs[i]);
        }
        String result = sb.toString();
        if (result.charAt(0) == '0') return "0";
        return result;
    }
}