Featured image of post 剑指 Offer 45. 把数组排成最小的数

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

题目描述

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

示例 1:

  • 输入: [10,2]
  • 输出: “102”

示例 2:

  • 输入: [3,30,34,5,9]
  • 输出: “3033459”

提示:

  • 0 < nums.length <= 100

说明:

  • 输出结果可能非常大,所以你需要返回一个字符串而不是整数
  • 拼接起来的数字可能会有前导 0,最后结果不需要去掉前导 0

解法一:排序

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
func max(nums ...int) int {
    res := nums[0]
    for _, val := range nums {
        if val > res {
            res = val
        }
    }
    return res
}

func minNumber(nums []int) string {
    sort.Slice(nums, func(i, j int) bool {
        x, y := fmt.Sprintf("%d", nums[i]), fmt.Sprintf("%d", nums[j])
        return x+y < y+x
    })
    var ans string
    for _, num := range nums {
        ans += fmt.Sprintf("%d", num)
    }
    return ans
}
Licensed under CC BY-NC-SA 4.0
最后更新于 2023/06/23 11:20:02
comments powered by Disqus
Built with Hugo
主题 StackJimmy 设计