Leetcode 179. 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.

思路:
按题目要求的规则进行对数组进行排序,排序后拼装最后的字符串即可。
排序方法需要自定义,自己想的方法比较搓,看了discuss的排序方法,很巧妙。
先生成一个字符串数组,比较两个字符串数字时,先生成两个字符串数字能组合出的数字,然后再compare两个组合出的字符串数字。
最后有一个坑,是数组中所有数字都是0的极限情况。

public String largestNumber(int[] nums) {
    if (nums == null || nums.length == 0) {
        return "0";
    }

    String[] s_num = new String[nums.length];
    for (int i = 0; i < nums.length; i++) {
        s_num[i] = String.valueOf(nums[i]);
    }

    Comparator comp = new Comparator() {
        @Override
        public int compare(String o1, String o2) {
            String s1 = o1 + o2;
            String s2 = o2 + o1;
            return s2.compareTo(s1);
        }
    };
    Arrays.sort(s_num, comp);

    if (s_num[0].equals("0")) {
        return "0";
    }

    StringBuilder buffer = new StringBuilder();
    for (int i = 0; i < nums.length; i++) {
        buffer.append(s_num[i]);
    }

    return buffer.toString();
}

你可能感兴趣的:(Leetcode 179. Largest Number)