最大数——排序

74 阅读1分钟

image.png

代码:

  1. 排序,制定排序规则,模拟两个数谁在前谁在后,然后返回两个模拟结果的比较即可
  2. 如果第一个元素为 0 ,直接返回 0 即可(特殊情况)
  3. 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)
}