13. 罗马数字转整数

解题思路

LVIII
58
L = 50, V= 5, III = 3.

IV
V = 10,I = 1,I < V
IV = V - I = 9

两个函数,一个将罗马字母映射对应的整数,一个计算罗马字母对应的整数。

对罗马字母串从前往后先做“加法”,循环到下一个字母的时候判断当前字母和前一个字母的“大小”,如果是小,即IV这种类型的,因为之前已经加了一个I了,所以这里减去I,然后计算IV的和,即V-I。整个字母串累加得到最后结果。

代码

Swift

执行用时:48 ms
内存消耗:21.3 MB

class Solution {
    func romanToInt(_ s:String) -> Int {
        let chars = [Character](s)
        var sum = 0
        var pre = 0
        for c in chars {
            let cur = self.romanChracterToInt(c)
            sum += cur
            if pre < cur {
                sum -= 2 * pre
            }
            pre = cur
        }
        return sum
    }
    private func romanChracterToInt(_ 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)