Lever's Castle

13. 罗马数字转整数

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 的情况。


Lever

痕迹
没有过去,就没法认定现在的自己