题目
给定一个罗马数字,将其转换成整数。输入确保在 1 到 3999 的范围内。
题解
罗马数字包含以下七种字符:
字符 | 数值 |
---|---|
I | 1 |
V | 5 |
X | 10 |
L | 50 |
C | 100 |
D | 500 |
M | 1000 |
通常情况下小的罗马数字会在大的右边,但也有特殊情况。比如说“4”就表示为“IX”,而不是“IIII”。
这道题因为输入规定了都是合法的,所以就不用考虑更多的不合法输入的情况。所以可以采用比较暴力直接的解法,遍历输入的罗马数字字符串,相邻的前一个数比后一个数小就直接减去,否则就加,最后输出结果即可。
代码
class Solution {
public:
int romanToInt(string s) {
unordered_map<char, int> romanMap;
romanMap['I'] = 1;
romanMap['V'] = 5;
romanMap['X'] = 10;
romanMap['L'] = 50;
romanMap['C'] = 100;
romanMap['D'] = 500;
romanMap['M'] = 1000;
int num = 0;
for(int i = 0; i < s.length(); i++) {
if(romanMap[s[i]] < romanMap[s[i+1]]) {
num -= romanMap[s[i]];
} else {
num += romanMap[s[i]];
}
}
return num;
}
};