leetcode No13. Roman to Integer

来源:互联网 发布:9月2非农数据 编辑:程序博客网 时间:2024/06/05 20:55

前言:

先说点背景吧,这题我一直放着没做,因为我不知道Roman数是怎么计数的呀,然后最近在看《数学之美》(特别有意思的书,第一次觉得数学还挺有意思的)罗马人也是用不同的符号代表数的不同量级。

Symbol  Value

I                  1

V                 5

X                10

L                 50

C                100

D                500

M               1,000

解码规则:小数字出现在大数字左边为减,右边为加。

Ex:IV表示5-1=4,VII表示5+2=7,IIXX表示10-2+10=18

PS:这种解码规则太复杂,而且对于大的数字很难描述。比如写一百万,要写无数个M。直到近代他们才在M上用上划线表示几万和几十万。而中国人的解码规则是乘法,所以我们的祖先还是挺聪明的大笑

Question:

Given a roman numeral, convert it to an integer.

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

就是把罗马字转换成十进制整型数。

Algorithm:

比较相邻的数,如果前一个数比后一个数大就加法,如果前一个数比后一个数小就减法。

Submitted Code:

class Solution {public:    int romanToInt(string s) {        if(s.size()==0)return 0;        map<char,int> hash;        hash['I']=1;        hash['V']=5;        hash['X']=10;        hash['L']=50;        hash['C']=100;        hash['D']=500;        hash['M']=1000;        if(s.size()==1)return hash[s[0]];        int res = hash[s[0]];        for(int i=1;i<s.size();i++)        {            if(hash[s[i-1]]<hash[s[i]])                res=res-hash[s[i-1]]+hash[s[i]]-hash[s[i-1]];  //因为之前加过hash[s[i-1]]            else                 res=hash[s[i]]+res;        }        return res;    }};





0 0
原创粉丝点击