首页 > 技术文章 > lintcode-419-罗马数字转整数

libaoquan 2017-08-15 18:44 原文

419-罗马数字转整数

给定一个罗马数字,将其转换成整数。
返回的结果要求在1到3999的范围内。

说明

什么是 罗马数字?

样例

IV -> 4
XII -> 12
XXI -> 21
XCIX -> 99

标签

字符串处理 优步

思路

罗马数字编码规则见lintcode-418-整数转罗马数字
每次跟前面的数字比较,如果小于等于前面的数字,我们先加上当前的数字,如果大于的前面的数字,我们加上当前的数字减去二倍前面的数字,这样可以把在上一个循环多加数减掉

code

class Solution {
public:
    /*
     * @param s: Roman representation
     * @return: an integer
     */
    int romanToInt(string s) {
        // write your code here
        int result = 0;
        map<char, int> map{ { 'I', 1 },{ 'V', 5 },{ 'X', 10 },
                            { 'L', 50 },{ 'C', 100 },{ 'D', 500 },
                            { 'M', 1000 } 
        };
        for (int i = 0; i < s.size(); i++) {
            if (i == 0 || map[s[i]] <= map[s[i - 1]]) {
                result += map[s[i]];
            }
            else {
                result += map[s[i]] - 2 * map[s[i - 1]];
            }
        }
        return result;
    }
};

推荐阅读