LeetCode 13 罗马数字转整数

发布时间 2023-10-07 22:09:55作者: gao79138

LeetCode 13 罗马数字转整数

1. 题目地址

    https://leetcode.cn/problems/roman-to-integer/description/

2. 题解

    这道题的解题过程非常简单,具体如下:
        1.  我们需要将罗马数字对应的数,存到一个哈希表中。待用到时,直接使用即可。
        2.  对于正常情况讲(前面的罗马数字大于后面的罗马数字),当我们遍历到一个罗马数字之后,直接累加其值即可。
        3.  对于题目中的例外情况,我们发现:该二元组后面的罗马数字要大于前面的罗马数字,因此我们直接累加:后面的罗马数字值 - 前面的罗马数字值即可。需要注意的是:我们需要判断边界(该罗马数字后面一定要有数)

3. 代码

class Solution {
public:
    int romanToInt(string s) {
        int result = 0;
        unordered_map<char,int> h;
        h['I'] = 1;
        h['V'] = 5;
        h['X'] = 10;
        h['L'] = 50;
        h['C'] = 100;
        h['D'] = 500;
        h['M'] = 1000;
        for(int i = 0;i < s.size(); i++){
            //如果该数字后面有数且后面的值大于前面的值(属于例外情况)
            if(i + 1 < s.size() && h[s[i]] < h[s[i+1]]){
                result += h[s[i+1]] - h[s[i]];
                //跳过该二元组,进入下一个罗马数字
                i++;
            }else{
                result += h[s[i]];
            }
        }
        return result;
    }
};