leetcode 179. 最大数

题目描述

给定一组非负整数,重新排列它们的顺序使之组成一个最大的整数。

示例 1:
输入: [10,2]
输出: 210

示例 2:
输入: [3,30,34,5,9]
输出: 9534330

说明: 输出结果可能非常大,所以你需要返回一个字符串而不是整数。

题解

自定义排序方式,比较 arr[i]+arr[j], arr[j]+arr[i] 两种相连方式,例如比较 “34” 和 “341” 时,可以转换为比较 “34341” 和 “34134”,可以看出 “34” 要排在 “341” 前面

示例代码(go)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
func largestNumber(nums []int) string {
arr := make([]string, 0)
for _, v := range nums {
arr = append(arr, strconv.Itoa(v))
}
sort.Slice(arr, func (i, j int) bool {
return arr[i]+arr[j] > arr[j]+arr[i]
})
res := strings.Join(arr, "")
if len(res) > 0 && res[0] == '0' {
return "0"
}
return res
}