13. 罗马数字转整数

小豆丁 1年前 ⋅ 1156 阅读
13. 罗马数字转整数
罗马数字包含以下七种字符: I, V, X, L,C,D 和 M。

字符          数值
I             1
V             5
X             10
L             50
C             100
D             500
M             1000
例如, 罗马数字 2 写做 II ,即为两个并列的 1。12 写做 XII ,即为 X + II 。 27 写做  XXVII, 即为 XX + V + II 。

解析

套路就是每次都去算前一个字符,因为前一个字符可能比当前字符小,就需要减去。

class Solution {
    public int romanToInt(String s) {
        int res = 0;
        char pre = ' ';
        for(char val: s.toCharArray()){
            if(pre ==' '){
                pre=val;
                continue;
            }
            if(getValue(pre)<getValue(val)){
                res -= getValue(pre);
            }else{
                res+=getValue(pre);
            }
            pre = val;
        }
        res+=getValue(pre);
        return res;
    }
    private int getValue(char ch) {
        switch(ch) {
            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;
        }
    }
}