剑指Offer 45. 把数组排成最小的数

发布时间 2023-09-07 16:45:10作者: 小星code

题目链接: 剑指 Offer 45. 把数组排成最小的数

题目描述:

输入一个非负整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。

解法思路:

本题解法比较巧妙,需要记住该解法。

  • 自定义一种排序规则,规则为: nums[i] + nums[j] 这样的拼接方式 所得到的结果 小于 nums[j] + nums[i]
  • 这样数组经过排序后,当前nums数组的排列就是最小值
  • 拼接结果,输出即可

代码:

func minNumber(nums []int) string {
    //自定义排序,满足 i+j 这样拼接的结果 < j+i 这样的拼接结果
    sort.Slice(nums,func(i,j int)bool{
        x := strconv.Itoa(nums[i]) + strconv.Itoa(nums[j])
        y := strconv.Itoa(nums[i]) + strconv.Itoa(nums[j])
        return x < y
    })
    //排序之后,nums表示的就是最小的
    res := ""
    for i:=0;i<len(nums);i++{
        res += strconv.Itoa(nums[i])
    }
    return res
}