swift实现罗马数字转整型

来源:互联网 发布:淘宝亲宝贝是什么 编辑:程序博客网 时间:2024/04/30 03:04

规则:给一串罗马数字,如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
    }
}

原创粉丝点击