Leetcode典型题解答和分析、归纳和汇总——T12(罗马数字转换为整数)

题目描述:

罗马数字包含以下七种字符:IVXLCDM

问题解析:

【1】通过构建hashmap的键值对的查询关系,可以获得罗马数字与整数之间的关系;

【2】处理特殊的规则:逐个识别罗马字符串s(从左至右),当s[i]>s[i+1](即左边比右边大,如XI),正常规则,则采用加法,如果出现s[i]<s[i+1],表示特殊规则(如IX),需要减去该数值。

具体代码如下:

class Solution{
    public:
    int romanToInt(string s)
    {
        unordered_map<char, int> mp;  //构建键值对hashmap
        mp['I'] = 1;
        mp['V'] = 5;
        mp['X'] = 10;
        mp['L'] = 50;
        mp['C'] = 100;
        mp['D'] = 500;
        mp['M'] = 1000;
        
        int pos =0, neg = 0;
        for(int i=0;i<s.size()-1;i++)
        {
           if(mp[s[i]]<mp[s[i+1]])  //表示特殊规则,采用减法
           {
               neg -=mp[s[i]];
            }
           else
           {
              pos += mp[s[i]];
           }
        }
        pos+=mp[s.back()];
        return pos+neg;
    }
};
发布了56 篇原创文章 · 获赞 7 · 访问量 4496

猜你喜欢

转载自blog.csdn.net/weixin_44504987/article/details/104275264