179. 最大数
给定一组非负整数 nums,重新排列每个数的顺序(每个数不可拆分)使之组成一个最大的整数。
注意:输出结果可能非常大,所以你需要返回一个字符串而不是整数。
示例 1:
输入:nums = [10,2]
输出:"210"
示例 2:
输入:nums = [3,30,34,5,9]
输出:"9534330"
提示:
- 1 <= nums.length <= 100
- 0 <= nums[i] <= 10^9
解题思路
假如有两个字符串ab cd,如果abcd < cdab ,则拼成数字后,abcd也会小于cdab
如30和34,字符串"3034" < "3430",则数字也有3034<3430。所以本题就是自定义一个排序规则就行了。
注意去除前导0
Go代码
func largestNumber(nums []int) string {
/*
假如有两个字符串`ab cd`,如果`cdab > abcd` ,则拼成数字后,`cdab`也会小于`abcd`
如30和34,字符串"3430" > "3034",则数字也有3430<>3034。所以本题就是自定义一个排序规则就行了。
*/
if len(nums) == 0 {
return ""
}
sort.Slice(nums,func(i,j int) bool {
return fmt.Sprintf("%d%d",nums[i],nums[j]) > fmt.Sprintf("%d%d",nums[j],nums[i])
})
sb := strings.Builder{}
for i := 0;i < len(nums);i++ {
sb.WriteString(fmt.Sprintf("%d",nums[i]))
}
// 去除前导0,如[0,0]拼接后是”00“,我们只需要返回”0“
res := sb.String()
i := 0
for i < len(res) - 1{
if res[i] != '0'{
break
} else {
i++
}
}
res = res[i:]
return res
}

2万+

被折叠的 条评论
为什么被折叠?



