【LeetCode刷题】-C++-简单-罗马数字转整数

Task:

在这里插入图片描述
在这里插入图片描述

思路:
  • 首先最需要注意的就是把题目读懂,弄懂规则,这里最重要的就是下面的两个信息:
  • 在这里插入图片描述在这里插入图片描述
    可以看到需要特殊处理的就是I X 和 C 三个字符,他们分别在自己后面的两个数的左边和右边代表着不同的意思,
    就拿I和V来说,如果I在V的左边那就是要用V减去I,如果I在V的右边,那就直接是V加上I,
    剩下的也是一样的规律

所以,我们需要注意!

  • 过度到算法:
    上面列出了基本的规则,下面就要过度到算法层面:
    可以发现当那三个特殊的I X C如果在另外一个搭档的左边,都是说明这个数要比后面的那个数字小,比如 IV IX 等等,前者都是小的
    XL XC也不例外,所以这下可以统一起来了!
    如果我们对给定的string s进行遍历,从第一个开始
    (1)当前罗马数字对应的整数如果比后一个小,那么结果就等于后者减去前者;
    (2)当前罗马数字对应的整数如果比后一个大,那好半,直接给结果加上这个数字就好了!

代码如下:
(1)利用map简历罗马表;
(2)进行判断!
(3)返回结果!

代码:
class Solution {
public:
    int romanToInt(string s) {
        int result =0; //存放结果
        map<char, int> luomab; //简历罗马表
        //插入对应的关系
        luomab.insert(map<char, int>::value_type('I', 1));
        luomab.insert(map<char, int>::value_type('V', 5));
        luomab.insert(map<char, int>::value_type('X', 10));
        luomab.insert(map<char, int>::value_type('L', 50));
        luomab.insert(map<char, int>::value_type('C', 100));
        luomab.insert(map<char, int>::value_type('D', 500));
        luomab.insert(map<char, int>::value_type('M', 1000));
        
        //遍历
        for(int i=0; i<s.length(); i++){
            if(luomab[s[i]] >= luomab[s[i+1]])
                result += luomab[s[i]];
            else{
                result += (luomab[s[i+1]] - luomab[s[i]]);
                i++;
            }
        }
        return result;
        
    }
};
提交结果:

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值