1 回答

TA貢獻(xiàn)1804條經(jīng)驗(yàn) 獲得超3個(gè)贊
將它們存儲(chǔ)在地圖中,然后嘗試您要查找其費(fèi)用的號(hào)碼。如果數(shù)字(鍵)不在地圖中,則切斷其最后一位數(shù)字并重復(fù)。這樣,如果您找到匹配項(xiàng),則可以保證這將是最長(zhǎng)的前綴。
這是一個(gè)示例查找函數(shù):
var prefixCostMap = map[uint64]float64{
44: 0.01597,
447: 0.04958,
447530: 0.03,
447531: 0.048,
447532: 0.04950,
1: 0.1,
97: 0.1,
}
func lookup(num uint64) (longestPrefix uint64, cost float64, ok bool) {
longestPrefix = num
for longestPrefix > 0 {
cost, ok = prefixCostMap[longestPrefix]
if ok {
break
}
longestPrefix = longestPrefix / 10 // Cut off last digit
}
return
}
測(cè)試它:
fmt.Println(lookup(4475122112))
fmt.Println(lookup(4475302112))
fmt.Println(lookup(999))
輸出(在Go Playground上嘗試):
447 0.04958 true
447530 0.03 true
0 0 false
注意:這不支持以 0 開(kāi)頭的數(shù)字。如果您還需要處理它,您可以將數(shù)字存儲(chǔ)為字符串值,這樣初始0數(shù)字將被保留。
這是string版本的樣子:
var prefixCostMap = map[string]float64{
"44": 0.01597,
"447": 0.04958,
"447530": 0.03,
"447531": 0.048,
"447532": 0.04950,
"1": 0.1,
"97": 0.1,
"0123": 0.05,
}
func lookup(num string) (longestPrefix string, cost float64, ok bool) {
longestPrefix = num
for longestPrefix != "" {
cost, ok = prefixCostMap[longestPrefix]
if ok {
break
}
longestPrefix = longestPrefix[:len(longestPrefix)-1] // Cut off last digit
}
return
}
測(cè)試它:
fmt.Println(lookup("4475122112"))
fmt.Println(lookup("4475302112"))
fmt.Println(lookup("999"))
fmt.Println(lookup("0123456"))
輸出(在Go Playground上嘗試):
447 0.04958 true
447530 0.03 true
0 false
0123 0.05 true
- 1 回答
- 0 關(guān)注
- 125 瀏覽
添加回答
舉報(bào)