LeetCode 13. Roman to Integer

本文介绍了一种将罗马数字转换为整数的算法。通过分析罗马数字的构成规则,文章详细解释了如何从右至左遍历字符串,并根据相邻数字的大小决定加法或减法操作。此外,还提供了完整的C++代码实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Roman to Integer

题目要求:给出一个罗马数字,要求转化为整型数字。
题目给出的框架如下:

class Solution {
public:
    int romanToInt(string s) {

    }
};

先验知识:

下面为罗马数字与阿拉伯数字的对照表:

罗马数字阿拉伯数字
I1
V5
X10
L50
C100
D500
M1000
例1:DCXXI621
例2:MXD1490

解题思路

罗马数字从右往左数,碰到更大的数就相加,碰到更小的数就相减。如上面所给的例子:DCXXI,从I开始,碰到的数越来越大,所以结果为:1+10+10+100+500=621。
之所以从右边开始算,而不从左边开始算,是因为规则简单,即:碰到更大的则相加,碰到更小的则相减。如果是从左边算的话,则碰到较大的数需要寻找左边不小于该数的数字。如例2所示:MXD,当碰到D的时候,需要找到不小于D的数字M,计算XD之后才能得到MXD。
代码实现如下:

class Solution {
public:
    int romanToInt(string s) {
        map<char, int> val;
        val['I'] = 1;
        val['V'] = 5;
        val['X'] = 10;
        val['L'] = 50;
        val['C'] = 100;
        val['D'] = 500;
        val['M'] = 1000;
        int sum = val[s[s.length() - 1]];
        for (int i = s.size() - 2; i >= 0; --i) {
            if (val[s[i]] < val[s[i + 1]])
                sum -= val[s[i]];
            else
                sum += val[s[i]];
        }
        return sum;
    }
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值