题目:
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
Leetcode_num14_Roman to Integer
原文地址:http://blog.csdn.net/eliza1130/article/details/39958985