0
点赞
收藏
分享

微信扫一扫

罗马数字转整数

Brose 2022-01-10 阅读 84

这个地方有一个关于罗马数字的规律:
通常情况下,罗马数字中小的数字在大的数字的右边。若输入的字符串满足该情况,那么可以将每个字符视作一个单独的值,累加每个字符对应的数值即可。

例如 XXVII 可视作 X+X+V+I+I=10+10+5+1+1=27

若存在小的数字在大的数字的左边的情况,根据规则需要减去小的数字。对于这种情况,我们也可以将每个字符视作一个单独的值,若一个数字右侧的数字比它大,则将该数字的符号取反。

例如X - I + V = 10 -1 +5 =14

链接:https://leetcode-cn.com/problems/roman-to-integer/solution/luo-ma-shu-zi-zhuan-zheng-shu-by-leetcod-w55p/
来源:力扣(LeetCode)
代码如下:
用一个map来确定一下对应关系:
然后判断一下右边的数字是比前面的数字大小(不能用左边的数字来判断右边的,左边罗马数字的符号是由右边的数字决定的)

class Solution {
private:
    map<char,int>sybolvalue = {
        {'I',1},
        {'V',5},
        {'X',10},
        {'L',50},
        {'C',100},
        {'D',500},
        {'M',1000},
    };

public:
    int romanToInt(string s) {
        int n = s.length();
        int endvalue=0;
        for(int i=0;i<n;i++)
        {
            int value = sybolvalue[s[i]];
            if(i<n-1&&value < sybolvalue[s[i+1]])
            {
                endvalue = endvalue - value;
            } 
            else
            {
                endvalue = endvalue + value;
            }
        }
        return endvalue;
    }
};
举报

相关推荐

0 条评论