美文网首页swiftiOS
[Swift LeetCode]13. Roman to Int

[Swift LeetCode]13. Roman to Int

作者: NinthDay | 来源:发表于2016-01-18 22:54 被阅读121次

题目

原题链接
Given a roman numeral, convert it to an integer.
Input is guaranteed to be within the range from 1 to 3999.

思路

TODO:之后添加

代码

class Solution {
/**
    /// @brief: 规则如下
    /// I(1),V(5),X(10),L(50),C(100),D(500),M(1000)
    /// 右加左减
    /// 在一个较大的罗马数字的右边记上一个较小的罗马数字,表示大数字加小数字。
    /// 在一个较大的数字的左边记上1个较小的罗马数字,表示大数字减小数字
    */
    func romanToInt(s: String) -> Int {
        
        var result :Int = 0

        var currIndex = s.endIndex
        var currValue = 0 // 注意result = 0 其实看成了加上currValue的结果
        
        while(currIndex != s.startIndex){
            let prevIndex = currIndex.predecessor()
            let prevValue = romanMapInt(s[prevIndex])
            
            if(prevValue >= currValue){
                result += prevValue
            }else{
                result -= prevValue
            }
            
            currIndex = prevIndex
            currValue = prevValue
            
        }
    
        return result
    }
    
    func romanMapInt(c:Character)->Int{
        switch(c) {
        case "I": return 1;
        case "V": return 5;
        case "X": return 10;
        case "L": return 50;
        case "C": return 100;
        case "D": return 500;
        case "M": return 1000;
        default: return 0;
        }
    }
}

相关文章

网友评论

    本文标题:[Swift LeetCode]13. Roman to Int

    本文链接:https://www.haomeiwen.com/subject/ouvkkttx.html