December 06, 2019
https://leetcode-cn.com/problems/roman-to-integer/
使用语言:Go
func romanToInt(s string) int {
romanMap := make(map[string]int)
romanMap["I"] = 1
romanMap["IV"] = 4
romanMap["V"] = 5
romanMap["IX"] = 9
romanMap["X"] = 10
romanMap["XL"] = 40
romanMap["L"] = 50
romanMap["XC"] = 90
romanMap["C"] = 100
romanMap["CD"] = 400
romanMap["D"] = 500
romanMap["CM"] = 900
romanMap["M"] = 1000
var res int
var lastNum int
for i:=len(s)-1; i>=0; i-- {
r := s[i]
v := romanMap[string(r)]
if v < lastNum {
res -= v
} else {
res += v
}
lastNum = v
}
return res
}
跟上一道题目一样,列举出所有情况。不过这次要反着来。这次我从个位数开始算,按照前一个位置的数一定 >= 后一个位置的数这个原则来看,一旦出现前一个数比后一个数小的情况,我们就应该把这个数减掉来满足罗马数字中逢 4 和逢 9 的情况。
痕迹
没有过去,就没法认定现在的自己