Dorck's Blog

修技术之道,日三省吾身 | App Dev & Freelance Thinker & Hacker Growth | 这里是 @道轲(Dorck) 的个人博客,与你一起探寻世界。

马上订阅 Dorck's Blog RSS 更新: https://dorck.cn/feed.xml

把数组排成最小的数

2023年3月19日 17:18
数据结构排序算法

本文是对于 常用排序算法合集 的扩展应用。

题目内容

把数组排成最小的数。要求如下:

输入一个非负整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。

附加说明:

  • 0 < nums.length <= 100

  • 输出结果可能非常大,所以你需要返回一个字符串而不是整数
  • 拼接起来的数字可能会有前导 0,最后结果不需要去掉前导 0

题意分析

首先写几条测试用例来带入实际场景看一下情况:

  • 输入 [2, 10, 6],输出拼接后的最小值是:1026
  • 输入 [48, 3, 305, 16],输出拼接后的最小值:16305348

由上可知,想要拼接得到最小值,只需要将数组中的元素按某种规律依次“从小到大”排列即可。值得注意的是,这里的“大小”并不是简单数值比较,而是与目标元素拼接后哪个较小。举个例子,数字 3 与数字 305 比较大小,正常来说 3 < 305 ,而在本题情境下,显然 305 应该排在 3 之前,因为 3305 > 3053。那么,我们不难得出以下结论:

  • 若 x + y > y + x,则 x “大于” y,本题情境下,y 应该排在 x 之前;
  • 若 x + y < y + x,则 x “小于” y,x 应排在 y 之前。

代码实现

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
class Solution {
    public String minNumber(...

剩余内容已隐藏

查看完整文章以阅读更多