Leetcode 179. 最大数

Leetcode 179. 最大数

这是一道很经典的题目

难度

中等

题目

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

解法

排序

给我们的是int类型数组,我们首先需要将其转化为string数组。

排序的比较器:

尽可能将大的数字放在前面。

所以我刚开始排序写的是下面这样:

Arrays.sort(strNum, new Comparator<String>() {
    public int compare(String o1, String o2) {
        int length = o1.length() < o2.length() ? o1.length() : o2.length();
        for (int i = 0; i < length; i++) {
            if (o1.charAt(i) > o2.charAt(i))
                return -1;
            if (o2.charAt(i) > o1.charAt(i))
                return 1;
            if (i == length - 1) {
                String s1 = o1 + o2;
                String s2 = o2 + o1;
                for (int j = 0; j < s2.length(); j++) {
                    if (s1.charAt(j) > s2.charAt(j))
                        return -1;
                    else if (s1.charAt(j) < s2.charAt(j))
                        return 1;
                }
                return 0;
            }
        }
        return 0;
    }
});

后面感觉我在前面\(i<length-1\)这一段判断的也可以用s1+s2与s2+s1比较判断。

利用lambda表达式:

class Solution {
    public String largestNumber(int[] nums) {
         String strNum[] = new String[nums.length];
        for (int i = 0; i < nums.length; i++) {
            strNum[i] = String.valueOf(nums[i]);
        }
        Arrays.sort(strNum, ((s1, s2) -> (s2 + s1).compareTo(s1 + s2)));
        StringBuilder out = new StringBuilder();
        for (String e : strNum)
            out.append(e);
        if (out.length() != 1) {
            for (int i = 0; i < out.toString().length(); i++) {
                if (out.charAt(i) != '0')
                    break;
                if (out.charAt(i) == '0') {
                    out.deleteCharAt(i);
                    i = 0;
                }

            }
        }
        return out.toString();
    }
}
上一篇:行为型设计模式之模板方法(TEMPLATE METHOD)模式 ,策略(Strategy )模式


下一篇:云计算和社交网络将推动美科技业重组