LeetCode 179 – 最大数

题目描述

给定一组非负整数 nums,重新排列每个数的顺序(每个数不可拆分)使之组成一个最大的整数。
注意:输出结果可能非常大,所以你需要返回一个字符串而不是整数。

示例:
输入:nums = [10,2]
输出:”210″

题目分析

贪心
对数字进行排序,o1o2 > o2o1 时,o1排在前面

Java

public String largestNumber(int[] nums) {
    List<Integer> list = new ArrayList<>();
    for (int n : nums) {
        list.add(n);
    }
    list.sort((o1, o2) -> compare(o2, o1));
    StringBuilder sb = new StringBuilder();
    for (int n : list) {
        sb.append(n);
    }
    if (sb.charAt(0) == '0') {
        return "0";
    }
    return sb.toString();
}

private int compare(int o1, int o2) {
    String s1 = Integer.toString(o1);
    String s2 = Integer.toString(o2);
    return (s1 + s2).compareTo(s2 + s1);
}

Kotlin

fun largestNumber(nums: IntArray): String {
    val list = nums.sortedWith { o1, o2 -> ("o2" + "o1").compareTo("o1" + "o2") }
    val ans = list.joinToString("")
    if (ans[0] == '0') {
        return "0"
    }
    return ans
}

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

开始在上面输入您的搜索词,然后按回车进行搜索。按ESC取消。

返回顶部