罗马数字转整数原题地址
方法一:模拟
罗马数字是字符串,其中每个字符都对应一个整数值,为了方便查找,可以预先把这种对应关系存储到 key-value 模型的哈希表中。
遍历字符串,对于每个字符,
- 如果该字符不是最右边的字符,且它右边的字符对应的整数值更大一些,就要减去该字符对应的整数值。
- 否则就加上该字符对应的整数值。
由于该哈希表在所有类对象中只需存有一份,建议定义成静态的类成员变量。
// 方法一:模拟
class Solution
{
public:int romanToInt(string s){int ans = 0;for (int i = 0; i < s.size(); ++i){int val = symVal[s[i]];// 右边字符对应值更大,减去当前值,否则加上当前值if (i + 1 < s.size() && symVal[s[i + 1]] > val){ans -= val;}else{ans += val;}}return ans;}
private:static unordered_map<char, int> symVal;
};unordered_map<char, int> Solution::symVal
{{'I', 1},{'V', 5},{'X', 10},{'L', 50},{'C', 100},{'D', 500},{'M', 1000}
};