LeetCode 13. Roman to Integer 题解(C++)

LeetCode 13. Roman to Integer 题解(C++)


题目描述

  • Given a roman numeral, convert it to an integer.
  • Input is guaranteed to be within the range from 1 to 3999.

思路

  • 首先对罗马数字作出两个归纳:
    1.在保证整数是1~3999的范围内时,范围内的每个数字都可以用如下几个罗马数字的基础字符表示,分别为I,V,X,L,C,D,M,每个字符分别对应的数值为1,5,10,50,100,500,1000;
    2.若罗马数字的字符对应的数值大于等于其右边字符对应的数值,则应该加上它自身对应的数值,相反则减去它自身对应的数值。
  • 由上面的归纳,我们需要创建一张罗马数字的基础字符与其相对应的数值的哈希表,这里使用ordered_map实现,之后遍历字符串s,并用上面归纳的第2点为原则进行比较,并加上或减去相应的数值即可。

代码

class Solution 
{
public:
    int romanToInt(string s) 
    {
        unordered_map<char, int> romanToInt;
        romanToInt['I'] = 1;
        romanToInt['V'] = 5;
        romanToInt['X'] = 10;
        romanToInt['L'] = 50;
        romanToInt['C'] = 100;
        romanToInt['D'] = 500;
        romanToInt['M'] = 1000;

        int result = romanToInt[s[s.size() - 1]];
        for (int i = s.size() - 2; i >= 0; --i)
        {
            if (romanToInt[s[i]] >= romanToInt[s[i + 1]])
            {
                result += romanToInt[s[i]];
            }
            else
            {
                result -= romanToInt[s[i]];
            }
        }
        return result;
    }
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值