题解 | #把数组排成最小的数#

把数组排成最小的数

https://www.nowcoder.com/practice/8fecd3f8ba334add803bf2a06af1b993

package main

import (
	"sort"
	"strconv"
	"strings"
)

/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 *
 *
 * @param numbers int整型一维数组
 * @return string字符串
 */
func PrintMinNumber(numbers []int) string {
	// write code here
	if len(numbers) == 0 {
		return ""
	}

	strNumbers := make([]string, len(numbers))
	for i := 0; i < len(numbers); i++ {
		strNumbers[i] = strconv.Itoa(numbers[i])
	}
	// 这道题最重要的解决怎么样组装的数字是最小的,按照什么顺序组装?
	// 如果我们能得到这个次序,直接将这个次序的数字拼接在一起就好了
	// 只考虑首字符的大小不可靠,但是如果字符串 a 拼接 b 的得到的数字大于 b 拼接 a,那么肯定 b 应该排在 a 的前面
	sort.SliceStable(strNumbers, func(i, j int) bool {
		return strNumbers[i]+strNumbers[j] < strNumbers[j]+strNumbers[i]
	})

	var ret strings.Builder
	for i := 0; i < len(strNumbers); i++ {
		ret.WriteString(strNumbers[i])
	}

	return ret.String()
}

全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务