【力扣】罗马数字转整数,哈希集合+模拟

罗马数字转整数原题地址

方法一:模拟

罗马数字是字符串,其中每个字符都对应一个整数值,为了方便查找,可以预先把这种对应关系存储到哈希表中。

遍历字符串,对于每个字符,

  1. 如果该字符不是最右边的字符,且它右边的字符对应的整数值更大一些,就要减去该字符对应的整数值。
  2. 否则就加上该字符对应的整数值。
// 方法一:模拟
class Solution {
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,否则+val
            if (i + 1 < n && val < symbolValues[s[i + 1]])
            {
                ans -= val;
            }
            else
            {
                ans += val;
            }
        }

        return ans;
    }
private:
    static unordered_map symbolValues;
};

unordered_map Solution::symbolValues = {
        {'I', 1},
        {'V', 5},
        {'X', 10},
        {'L', 50},
        {'C', 100},
        {'D', 500},
        {'M', 1000}
};

你可能感兴趣的:(leetcode,哈希算法,算法)