罗马数字转整数原题地址
方法一:模拟
罗马数字是字符串,其中每个字符都对应一个整数值,为了方便查找,可以预先把这种对应关系存储到哈希表中。
遍历字符串,对于每个字符,
- 如果该字符不是最右边的字符,且它右边的字符对应的整数值更大一些,就要减去该字符对应的整数值。
- 否则就加上该字符对应的整数值。
// 方法一:模拟
class Solution {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.size();for (int i = 0; i < n; ++i){int val = symbolValues[s[i]];// 若右边的数更大,就-val,否则+valif (i + 1 < n && val < symbolValues[s[i + 1]]){ans -= val;}else{ans += val;}}return ans;}
};