胜我在写白痴LEETCODE了
这题好难
179. Largest Number
给一个整数矩阵nums
请回传可以透过nums里元素所组合出的最大数字
因为这个数字很大,请用字串回传
思路:
如果两个数字长度一样,那就直接比大小就好
大的放前面
难的是两个数字长度不一样要怎么排序
先把数字转成字串
假设有a(4个字符)、b(2个字符)两个数字
接着从第一个字符开始比较,同一个index谁大就谁放前面
因为两个数字长度不一样
所以可能会有一个数字先没有字符比较,这边是b
那就把b再去跟a的后面两个字符比较
这样就找到规则了
举例:3534、35
前面数字一样都是35,接着因为35>34
所以要按照35、3534这样得顺序才能得到比较大的数字
golang code :
func largestNumber(nums []int) string {
arr := make([]string, len(nums))
for key, val := range nums {
arr[key] = strconv.Itoa(val)
}
var cmp func(a, b string) int
cmp = func(a, b string) int {
if a == b {
return -1
}
length := len(a)
if length > len(b) {
length = len(b)
}
i := 0
for ; i < length; i++ {
if a[i] > b[i] {
return -1
} else if a[i] < b[i] {
return 1
}
}
if i == len(a) {
return cmp(a, b[i:])
}
return cmp(a[i:], b)
}
slices.SortFunc(arr, cmp)
var res strings.Builder
for _, val := range arr {
if val == "0" && res.String() == "0" {
break
}
res.WriteString(val)
}
return res.String()
}