Re: [閒聊] 每日leetcode
勝我在寫白癡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()
}
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 42.73.246.98 (臺灣)
※ 文章網址: https://www.ptt.cc/bbs/Marginalman/M.1726664914.A.23A.html
→
09/18 21:09,
1年前
, 1F
09/18 21:09, 1F
推
09/18 21:09,
1年前
, 2F
09/18 21:09, 2F
→
09/18 21:12,
1年前
, 3F
09/18 21:12, 3F
討論串 (同標題文章)
完整討論串 (本文為第 876 之 1548 篇):