Re: [閒聊] 每日leetcode
補一下之前的
670. Maximum Swap
給一個整數
可以將任一兩個位數交換
請回傳交換後最大的數字
思路:
開一個矩陣去紀錄0~9從後面數來第一次出現的index
接著從9開始從頭到9第一次出現的index
開始找有沒有比9還小的數字
有就交換沒有就去找後面的
就可以找到答案了
golang code :
func maximumSwap(num int) int {
s := []byte(strconv.Itoa(num))
rec, n := [10]int{}, len(s)-1
for i := n; i > -1; i-- {
if rec[int(s[i]-'0')] == 0 {
rec[int(s[i]-'0')] = i
}
}
for i := 9; i > -1; i-- {
if rec[i] != 0 {
for j := 0; j < rec[i]; j++ {
if int(s[j]-'0') < i {
s[j], s[rec[i]] = s[rec[i]], s[j]
rec[i] = -1
break
}
}
if rec[i] == -1 {
break
}
}
}
res, _ := strconv.Atoi(string(s))
return res
}
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 111.71.214.188 (臺灣)
※ 文章網址: https://www.ptt.cc/bbs/Marginalman/M.1729268244.A.697.html
推
10/19 00:20,
1年前
, 1F
10/19 00:20, 1F
討論串 (同標題文章)
完整討論串 (本文為第 1005 之 1554 篇):