题目描述

输入一个非负整数数组 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
}

本文由 一切随风 创作,可自由转载、引用,但需署名作者且注明文章出处。

还不快抢沙发

添加新评论