思路
创建一个哈希表,使用罗马数字和阿拉伯数字进行映射,最后转换为阿拉伯数字之后再相加即可
解题方法
描述你的解题方法
罗马数字的特点为通常情况下数字中小的数字在大的数字的右边,若满足该情况,则根据哈希表进行映射就行,但是若出现了小的数字在大的数字的右边,那么根据规则需要减去这个小的数字,即若一个数字它右侧的数字比它大,那么将该数字取反即可
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;
}
};