规则:给一串罗马数字,如MDCLXVI,从右往左看,如果前一个数字大于或等于现在的数字,则加前一个数字,小于则减前一个数字!
这是最简单的规则,最简单,最简单……可以拿几个罗马数字验证一下,知道这个规则,那么代码就好写了。。。
class Roman {
func romanToInt(_ s: String) -> Int {
let dic = ["I" : 1, "V" : 5, "X" : 10, "L" : 50, "C" : 100, "D" : 500, "M" : 1000]
var result :Int = 0
var currIndex = s.endIndex
var currValue = 0
while(currIndex != s.startIndex){
var prevIndex = s.index(before: currIndex)
var key = String(s[prevIndex])
var prevValue = dic[key]!
if(prevValue >= currValue){
result += prevValue
}else{
result -= prevValue
}
currIndex = prevIndex
currValue = prevValue
}
return result
}
}