代码:
- 排序,制定排序规则,模拟两个数谁在前谁在后,然后返回两个模拟结果的比较即可
- 如果第一个元素为 0 ,直接返回 0 即可(特殊情况)
- int 数组转 字符串
func largestNumber(nums []int) string {
sort.Slice(nums, func(i, j int) bool {
x, y := nums[i], nums[j]
sx, sy := 10, 10
for sx <= x {
sx *= 10
}
for sy <= y {
sy *= 10
}
return sy*x + y > sx*y + x
})
if nums[0] == 0 {
return "0"
}
var ans string
for _, x := range nums {
ans += strconv.Itoa(x)
}
return ans
}
代码2:
ans 生成方式不同
将数组转为字符切片,最后转为字符串
func largestNumber(nums []int) string {
sort.Slice(nums, func(i, j int) bool {
x, y := nums[i], nums[j]
sx, sy := 10, 10
for sx <= x {
sx *= 10
}
for sy <= y {
sy *= 10
}
return sy*x+y > sx*y+x
})
if nums[0] == 0 {
return "0"
}
ans := []byte{}
for _, x := range nums {
ans = append(ans, strconv.Itoa(x)...)
}
return string(ans)
}