Open yankewei opened 3 years ago
从题意我们可以看出来,只要找到每个数的最高位,然后根据最高位进行排序。 但是也会出现两个数的最高位相同,比如 30, 34 这时可以把两个数拼接起来,3034,3430,选择较大值放在前即可。
func largestNumber(nums []int) string {
sort.Slice(nums, func (i, j int) bool {
iHigh := getHigh(nums[i])
jHigh := getHigh(nums[j])
if iHigh < jHigh {
return false
}
if iHigh == jHigh {
x, y := strconv.Itoa(nums[i]) + strconv.Itoa(nums[j]), strconv.Itoa(nums[j]) + strconv.Itoa(nums[i])
xInt, _ := strconv.Atoi(x)
yInt, _ := strconv.Atoi(y)
if xInt < yInt {
return false
}
}
return true
})
if nums[0] == 0 {
return "0"
}
ans := ""
for _, v := range nums {
ans += strconv.Itoa(v)
}
return ans
}
func getHigh(x int) int {
for x >= 10 {
x /= 10
}
return x
}
给定一组非负整数 nums,重新排列每个数的顺序(每个数不可拆分)使之组成一个最大的整数。
注意:输出结果可能非常大,所以你需要返回一个字符串而不是整数。
示例 1:
示例 2:
示例 3:
示例 4:
提示:
来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/largest-number 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。