[Swift LeetCode]13. Roman to Integer

题目

原题链接
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;
        }
    }
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 背景 一年多以前我在知乎上答了有关LeetCode的问题, 分享了一些自己做题目的经验。 张土汪:刷leetcod...
    土汪阅读 12,788评论 0 33
  • 我从那里到这里,也要从这里回那里。来来回回。我从想要忘记,也想要铭记。犹犹豫豫。
    0不畏0阅读 184评论 0 0
  • 上一章! 想到这里,岳南倾狠狠的咬着右边的嘴唇,两笔剑眉紧紧的凑在了一起,一阵血腥味在嘴里蔓延起来。 他打开车载电...
    崖柏今天早起了阅读 210评论 0 2
  • 前段时间,与客户一起吃饭。席间,客户说起他前几天重新调整了一下办公室的风水,感觉这几天顺多了。 我好奇地问道:你找...
    良诺妈阅读 632评论 0 3