13. Roman to Integer 罗马数字转化成整数

Given a roman numeral, convert it to an integer.

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

Difficulty: Easy

这道题是把罗马数字转化成整数,和12. Integer to Roman 整数转罗马数字正好反着.关于罗马数字的简单介绍可以回看12. Integer to Roman 整数转罗马数字.

这道题明确告诉我们输入的是罗马数字,所有不需要验证是否为罗马数字.下面只需要考虑

  • 如果当前数字是最后一个数字,或之后的数字比它小的话,则加上当前的数字.举个反例CD-400,DC大,所以先减去C(100)再加上D(500),就得到结果400
  • 其他情况则减去这个数字
#include <unordered_map>

using namespace std;

class Solution {
public:
    int romanToInt(string s) {
        int res = 0;
        unordered_map<char, int> m{{'I',1},{'V',5},{'X',10},{'L',50},{'C',100},{'D',500},{'M',1000}};
        for (int i = 0; i < s.size(); i++) {
            int val = m[s[i]];
            //m[s[i+1]]不需要考虑越界,因为有'\0' m['\0']=0
            if (i == s.size()-1 || m[s[i+1]]<=m[s[i]]) res+=val;
            else res -= val;
        }
        return res;
    }
};
 
comments powered by Disqus