LeetCode-13. Roman to Integer

来源:互联网 发布:linux火狐设置中文 编辑:程序博客网 时间:2024/05/16 07:05

问题:https://leetcode.com/problems/roman-to-integer/?tab=Description
Given a roman numeral, convert it to an integer. Input is guaranteed to be within the range from 1 to 3999.
给一个罗马数字,把它转为整数。输入的数是1到3999之间。
分析:罗马数字:I=1 V=5 X=10 L=50 C=100 D=500 M=1000
相同的数字连写表示数值相加;小的数字在大的数字后面,表示大数字加小数字;小数字在大数字前面,表示大数字减小数字。
从第一个字符开始,先看成是加法的,比较当前值与前一个值的大小,如果当前值比前一个值小,加上当前值。如果当前值比前一个值大,说明前一个值应该是负的,又因为计算前一个值的时候已经加上了一个,所以现在要减去两个前一位的值再加上当前位的值。
C++代码:

class Solution {private:    int save[255];    void init(){        save['I']=1;save['V']=5;save['X']=10;save['L']=50;save['C']=100;save['D']=500;save['M']=1000;    }public:    int romanToInt(string s) {        init();        int sum=save[s[0]];        int l=s.length();        for(int i=1;i<l;i++){            int cur=save[s[i]];            int pre=save[s[i-1]];            if(cur>pre){                sum+=cur-2*pre;            }            else{                sum+=cur;            }        }        return sum;    }};
0 0
原创粉丝点击