179. 最大数
难度中等360
给定一组非负整数,重新排列它们的顺序使之组成一个最大的整数。
示例 1:
输入: [10,2]
输出: 210
示例 2:
输入: [3,30,34,5,9]
输出: 9534330
说明: 输出结果可能非常大,所以你需要返回一个字符串而不是整数。
分析
自定义排序:
想法
为了构建最大数字,我们希望越高位的数字越大越好。
算法
首先,我们将每个整数变成字符串。然后进行排序。
如果仅按降序排序,有相同的开头数字的时候会出现问题。比方说,样例 2 按降序排序得到的数字是 9534330395343303 ,然而交换 3 和 30 的位置可以得到正确答案 9534330 。因此,每一对数在排序的比较过程中,我们比较两种连接顺序哪一种更好。我们可以证明这样的做法是正确的:
假设(不是一般性),某一对整数 a和 b ,我们的比较结果是 a 应该在 b 前面,这意味着 a ⌢ b > b ⌢ a a\frown b > b\frown a a⌢b>b⌢a,其中 ⌢ 表示连接。如果排序结果是错的,说明存在一个 c , b在 c前面且 c 在 a 的前面。这产生了矛盾,因为 a ⌢ b > b ⌢ a a\frown b > b\frown a a⌢b>b⌢