NOTE
把数组排成最小的数
记录《剑指 Offer》“把数组排成最小的数”的原始解题笔记。
这是历史学习笔记,可能存在过时或不完整的理解。
1. 题目描述
输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。
2. 思路
- 自定义排序字符串
3. 实现
package main
import (
"sort"
"strconv"
)
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
* @param numbers int整型一维数组
* @return string字符串
*/
//时间复杂度:O(NlogN), 采用了排序
//空间复杂度:O(1)
func PrintMinNumber(numbers []int) string {
sort.Slice(numbers, func(i, j int) bool {
a, b := strconv.Itoa(numbers[i]), strconv.Itoa(numbers[j])
return a+b < b+a
})
res := ""
for _, number := range numbers {
res += strconv.Itoa(number)
}
return res
}
func minNumber(nums []int) string {
strs := make([]string, 0 , len(nums))
for _, num := range nums {
str := strconv.Itoa(num)
strs = append(strs, str)
}
sort.Slice(strs, func(i,j int) bool {
a := strs[i]+ strs[j]
b := strs[j]+ strs[i]
return a < b
})
res := ""
for _, str := range strs{
res += str
}
return res
}
讨论
使用 GitHub 账号参与讨论,评论会保存在 GitHub Issues 中。在 GitHub 查看