Leetcode 179. Largest Number

作者: ShutLove | 来源:发表于2017-11-15 10:09 被阅读10次

    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<String> comp = new Comparator<String>() {
            @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

        本文链接:https://www.haomeiwen.com/subject/qlkcvxtx.html