题目链接: 剑指 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
}