最大数00

题目链接

最大数

题目描述

最大数00_第1张图片

注意点

  • nums为一组非负整数

解答思路

  • 可以利用贪心算法先将nums进行排序,排序的规则是:如果a + b > b + a,则a应该排在b前面,此时a + b组成的数一定比b + a更大。当整个数组都按照上述的规则排序完成后,此时从头到尾组成的数一定是最大数

代码

class Solution {
    public String largestNumber(int[] nums) {
        int n = nums.length;
        String[] ss = new String[n];
        for (int i = 0; i < n; i++) {
            ss[i] = String.valueOf(nums[i]);
        }
        Arrays.sort(ss, (a, b) -> {
            String sa = a + b;
            String sb = b + a;
            return sb.compareTo(sa);
        });
        StringBuilder sb = new StringBuilder();
        for (String s : ss) {
            sb.append(s);
        }
        if (sb.charAt(0) == '0') {
            return "0";
        }
        return sb.toString();
    }
}

关键点

  • 贪心算法的思想
  • 因为本题中两数之和有可能越界,所以先将数字转换为字符串再相加比较大小,而字符串拼接后的值也可以直接用compareTo进行比较(与数字类似)
  • 注意考虑数组中的数字都为0的情况,此时会有多个前置0,只需要返回一个0即可

你可能感兴趣的:(算法,数据结构,leetcode,算法,java,贪心算法)