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.

Credits:

Special thanks to @ts for adding this problem and creating all test cases.

分析

[3, 30, 34, 5, 9]

排序成……

[9, 5, 34, 3, 30]

如何判断大小?对于每个元素,左边第一位大的在前面,如5>30。因为5的第一位是5是5,30的第一位是3。依次比较。

那么3应该比30大,因为3 + 30 = 330 ,而30 + 3 = 303。

所以本题可分为4步:

  1. 定义string数组,将int数组,转成string数组
  2. 对string数组按照定义的规则排序
  3. 如果strs第一个元素是“0”,则结果是0
  4. 连接strs数组成字符串,即为结果

代码

    public static String largestNumber(int[] nums) {

        String[] strs = new String[nums.length];

        // 将int数组,转成string数组
        for (int i = 0; i < strs.length; i++) {
            strs[i] = nums[i] + "";
        }

        // 对strs排序
        Arrays.sort(strs, new Comparator<String>() {

            public int compare(String x, String y) {
                return (y + x).compareTo(x + y);
            }
        });

        // 如果strs第一个元素是“0”,则结果是0
        if ("0".equals(strs[0])) {
            return "0";
        }

        // 连接strs数组成字符串
        return String.join("", strs);
    }
    原文作者:_我们的存在
    原文地址: https://blog.csdn.net/Yano_nankai/article/details/50177957
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞