LeetCode 热题 100 总结——罗马数字转整数

58 阅读1分钟

思路

创建一个哈希表,使用罗马数字和阿拉伯数字进行映射,最后转换为阿拉伯数字之后再相加即可

解题方法

描述你的解题方法
罗马数字的特点为通常情况下数字中小的数字在大的数字的右边,若满足该情况,则根据哈希表进行映射就行,但是若出现了小的数字在大的数字的右边,那么根据规则需要减去这个小的数字,即若一个数字它右侧的数字比它大,那么将该数字取反即可

private:
    unordered_map<char, int> symbolValues = {
        {'I', 1},  
        {'V', 5},  
        {'X', 10},  
        {'L', 50},
        {'C', 100},
        {'D', 500}, 
        {'M', 1000},
    };

public:
    int romanToInt(string s) {
        int ans = 0;
        int n = s.length();
        for (int i = 0; i < n; ++i) {
            int value = symbolValues[s[i]];
            if (i < n - 1 && value < symbolValues[s[i + 1]]) {
                ans -= value;
            } else {
                ans += value;
            }
        }
        return ans;
    }
};