LeetCode Algorithms #13 <Roman to Integer>

Given a roman numeral, convert it to an integer.

Input is guaranteed to be within the range from 1 to 3999.


思路:

(摘自互动百科)

表示数的基本方法:除I、X、C位于大数后作为加数,位于大数前作为减数外,一般把若干罗马基本数字写在一起,它表示的数字等于各个数字的和。
1.重写:   III(3)      XX(20)     CC(200)   
2.左减:   IX(9)      XL(40)     CD(400) 
3.右加:   VII(7)     XI(11)      LX(60)

先设法将输入的整个字符串中的所有罗马基本数字转换成阿拉伯数字,然后从左向右遍历,把当前数字加上,如果发现当前数字比上一个大,则把前一个减去两遍。

解:

class Solution {
public:
    int romanToInt(string s) {
        std::vector<int> numbers;
        int result = 0;
        for(size_t index = 0; index < s.size(); index++)
        {
            switch(s[index])
            {
                case 'I':
                numbers.push_back(1);
                break;
                case 'V' :
                numbers.push_back(5);
                break;
                case 'X' :
                numbers.push_back(10);
                break;
                case 'L' :
                numbers.push_back(50);
                break;
                case 'C' :
                numbers.push_back(100);
                break;
                case 'D' :
                numbers.push_back(500);
                break;
                case 'M' :
                numbers.push_back(1000);
                break;
            }
        }
        for(size_t index = 0; index < numbers.size(); index++)
        {
            result += numbers[index];
            if(index != 0 && numbers[index] > numbers[index-1])
            { 
                result -= 2*numbers[index-1];
            }
        }
        return result;
    }
};



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值