题目描述
输入一个非负整数数组 numbers,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。
例如输入数组[3,32,321],则打印出这三个数字能排成的最小数字为321323。
1.输出结果可能非常大,所以你需要返回一个字符串而不是整数
2.拼接起来的数字可能会有前导 0,最后结果不需要去掉前导 0
数据范围:0<=len(numbers)<=100
示例
// 输入:
[11,3]
// 返回值:
"113"
// 输入:
[]
// 返回值:
""
// 输入:
[3,32,321]
// 返回值:
"321323"
解题思路
- 对 numbers 中的元素(x、y)进行排序,排序规则是:x+y 和 y+x 比较大小(x、y需要转化成 string)
- 然后再次遍历 number,按顺序拼接成数组即可
代码实现
/**
* [JZ45-中等] 把数组排成最小的数
*
* @param numbers int整型一维数组
* @return string字符串
*/
func printMinNumFromArray(numbers []int) string {
count := len(numbers)
if count == 0 {
return ""
}
for i := 0; i < count; i++ {
for j := 0; j < count-1; j++ {
str1 := strconv.Itoa(numbers[j]) + strconv.Itoa(numbers[j+1])
str2 := strconv.Itoa(numbers[j+1]) + strconv.Itoa(numbers[j])
if str1 > str2 {
numbers[j], numbers[j+1] = numbers[j+1], numbers[j]
}
}
}
result := ""
for _, v := range numbers {
result += strconv.Itoa(v)
}
return result
}
还不快抢沙发