精華區beta Marginalman 關於我們 聯絡資訊
補一下之前的 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
DJYOSHITAKA: 大師 10/19 00:20