0
点赞
收藏
分享

微信扫一扫

LeetCode 13.罗马数字转整数 Python

_鱼与渔_ 2022-03-30 阅读 45
python

题目描述:

思路解析1:

对于罗马数字,如果左小右大,即后大于前,则后减去前,如:”IV = 5 - 1 = 4“;

如果左大右小,即前大于后,则直接累加即可,如:”VI = 5 + 1 = 6“。

思路解析2:

给定一串罗马数字,可全部采用累加的方式。每一个位置的数都和前一个数相比,如果后小于前,则累加;如果后大于前,则 (后-2×前)。

如题目中的示例 5:给定”MCMXCIV“,第一个位置M值为1000;

第二个位置C < 第一个位置M,则第二个位置值为:100;

第三个位置M > 第二个位置C,则第三个位置值为:1000 - 2 × 100 = 800;

第四个位置X < 第三个位置M,则第四个位置值为:10;

第五个位置C > 第四个位置X,则第五个位置值为:100 - 2 × 10 = 80;

第六个位置I < 第五个位置C,则第五个位置值为:1;

七第六个位置V > 第六个位置I,则第五个位置值为:5 - 2 × 1 = 3;

最终结果为:MCMXCIV = 1000 + 100 + 800 + 10 + 80 + 1 + 3 = 1994

代码:

定义字典将值全部存进去,len(s)表示罗马数字长度,如果前<后,则减法;否则累加。

class Solution:
    def romanToInt(self, s: str) -> int:
        d = {'I':1, 'V':5, 'X':10, 'L':50, 'C':100, 'D':500, 'M':1000}
        result = 0
        for i in range(len(s)):
            if(i < (len(s)-1) and d[s[i]] < d[s[i+1]]):
                result -= d[s[i]]
            else:
                result += d[s[i]]
        return result
举报

相关推荐

0 条评论