179.最大数
给定一组非负整数 nums,重新排列每个数的顺序(每个数不可拆分)使之组成一个最大的整数。
注意:输出结果可能非常大,所以你需要返回一个字符串而不是整数。
示例 1:
输入:nums = [10,2]
输出:"210"
示例 2:
输入:nums = [3,30,34,5,9]
输出:"9534330"
提示:
1 <= nums.length <= 100
0 <= nums[i] <= 109
解题思路:
- 这本质是一个排序问题,关键在于定义正确的比较规则
- 对于两个数字 a 和 b,我们需要比较 "ab" 和 "ba" 的大小:
- 如果 "ab" > "ba",则 a 应该排在 b 前面
- 如果 "ab" < "ba",则 b 应该排在 a 前面
- 使用自定义排序规则对数组进行排序
- 特殊处理:如果排序后第一个数字是0,则结果就是"0"
func largestNumber(nums []int) string {
if len(nums) == 0 {
return ""
}
var strNums = make([]string, len(nums))
for i, num := range nums {
strNums[i] = strconv.Itoa(num)
}
// 自定义排序
sort.Slice(strNums, func(i, j int) bool {
return strNums[i]+strNums[j] > strNums[j] + strNums[i]
})
// 特殊情况
if strNums[0] == "0" {
return "0"
}
return strings.Join(strNums, "")
}