美文网首页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