Leetcode_num14_Roman to Integer

来源:互联网 发布:java类库查询辞典 编辑:程序博客网 时间:2024/05/17 04:37

题目:

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

罗马数字的大小即是将其中所包含字符所代表的的数字求和,其中数字的组合规律为: I X C 会因位置的不同而加减其值。举个栗子,IV的值为4,而VI的值为6;CD的值为400,而DC的值为600。V L D M在1~3999的范围内则不存在该问题。

最终选择了一个只需遍历一次字符串的方法,即从末尾开始遍历罗马数字字符串,若出现 I(X ,C) ,如果已遍历部分的值高于V(L, D),则在已有结果中减去I(X ,C)的值,反之,则加上。

总结一句,此题的关键在于找规律,最后上代码咯~

class Solution:    # @return an integer    def romanToInt(self, s):        L=len(s)        res=0        for i in range(L-1,-1,-1):            a=s[i]            if a=='I':                if res>=5:                    res-=1                else:                    res+=1            elif a=='V':                res+=5            elif a=='X':                if res>=50:                    res-=10                else:                    res+=10            elif a=='L':                res+=50            elif a=='C':                if res>=500:                    res-=100                else:                    res+=100            elif a=='D':                res+=500            elif a=='M':                res+=1000        return res


0 0
原创粉丝点击