Roman to Integer - LeetCode

Roman to Integer - LeetCode

题目:


Given a roman numeral, convert it to an integer.

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


分析:

这道题首先我们得知道罗马数字的含义。

基本字符
I
V
X
L
C
D
M
相应的阿拉伯数字表示为
1
5
10
50
100
500
1000
1、相同的数字连写,所表示的数等于这些数字相加得到的数,如:Ⅲ = 3;
2、小的数字在大的数字的右边,所表示的数等于这些数字相加得到的数, 如:Ⅷ = 8;Ⅻ = 12;
3、小的数字,(限于Ⅰ、X 和C)在大的数字的左边,所表示的数等于大数减小数得到的数,如:Ⅳ= 4;Ⅸ= 9;
4、正常使用时,连写的数字重复不得超过三次。(表盘上的四点钟“IIII”例外)

由此我们可以知道如何在罗马数字和阿拉伯数字转换。例如,MCMXCVI 转换=:M + (M-C) + (C-X) + V+1  代入数字计算即可。

代码:
class Solution:
    # @return an integer
    def romanToInt(self, s):
        strto = {'I':1,'V':5,'X':10,'L':50,'C':100,'D':500,'M':1000}
        sum = 0
        i=0
        while i < len(s)-1:
            if strto[s[i]]<strto[s[i+1]]:
                sum+= (strto[s[i+1]]-strto[s[i]])
                i += 2
            else:
                sum += strto[s[i]]
                i += 1
            # print s[i]
        if strto[s[len(s)-2]]>=strto[s[len(s)-1]]:
            sum+=strto[s[len(s)-1]]
        return sum

你可能感兴趣的:(LeetCode,python)