1. 题目

Given a roman numeral, convert it to an integer.

Input is guaranteed to be within the range from 1 to 3999.

2. 思路

按序累加即可。考虑{4、9}*10^i的场景,做好减法和多跳一步。

3. 代码

耗时:29ms

class Solution {
public:
    Solution() {
        bzero(map, sizeof(map));
        map['I'] = 1;
        map['X'] = 10;
        map['C'] = 100;
        map['M'] = 1000;
        map['V'] = 5;
        map['L'] = 50;
        map['D'] = 500;
    }
    int romanToInt(string s) {
        int v = 0;
        int len = s.length();
        if (len == 0) return 0;
        if (len == 1) return map[s[0]];
        int i = 0;
        while (i < len) {
            if (s[i] == ' ') continue;
            if (i+1 < len && map[s[i+1]] > map[s[i]]) {
                v -= map[s[i]];
                v += map[s[i+1]];
                i += 2;
            } else {
                v += map[s[i]];
                i++;
            }
        }
        return v;
    }
private:
    int map[128];
};

knzeus
72 声望28 粉丝

行万里路,读万卷书