首页 > 代码库 > [LeetCode]179 Largest Number

[LeetCode]179 Largest Number

https://oj.leetcode.com/problems/largest-number/

public class Solution {
    public String largestNumber(int[] num) 
    {
        if (num == null || num.length == 0)
            return "";
            
        // Convert to string.
        List<String> strs = new ArrayList<>();
        for (int i : num)
            strs.add(String.valueOf(i));
            
        // Sort.
        // KEY STEP.
        Collections.sort(strs, comparator);
        
        // Case all numbers are 0.
        if (strs.get(0).equals("0"))
            return "0";

        // Build result.        
        StringBuilder sb = new StringBuilder();
        for (String s : strs)
            sb.append(s);
        return sb.toString();
    }
    
    // Comparator for string.
    //
    // a小于b 返回 -1
    // 默认sort 是 从小到大
    private Comparator<String> comparator = new Comparator<String>()
    {
        public int compare(String a, String b)
        {
            int i = 0;
            while (i < a.length() && i < b.length())
            {
                char ca = a.charAt(i);
                char cb = b.charAt(i);
                
                if (ca != cb)
                    return Character.compare(cb, ca);

                i++;
            }
            
            // 如果两字符相等
            if (i == a.length() && i == b.length())
                return 0;
                
            // 如果一个字符是另外一个字符的substring,需要重复比对
            // 体会
            // compare (12, 128)
            // compare (131, 13)
            else if (i != a.length()) // a has more
                return compare(a.substring(i, a.length()), b);
            else // i == a.length && i != b.length
                return compare(a, b.substring(i, b.length()));
        }
    };
}


[LeetCode]179 Largest Number