LeetCode 13. Roman to Integer

来源:互联网 发布:怎样加入淘宝客服 编辑:程序博客网 时间:2024/06/10 16:17

Roman to Integer

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

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

先验知识:

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

罗马数字 阿拉伯数字 I 1 V 5 X 10 L 50 C 100 D 500 M 1000 例1:DCXXI 621 例2:MXD 1490

解题思路

罗马数字从右往左数,碰到更大的数就相加,碰到更小的数就相减。如上面所给的例子: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;    }};