罗马数字转整数
题目
罗马数字转整数
例如, 罗马数字 2 写做 II
,即为两个并列的 1。12 写做 XII
,即为 X
+ II
。 27 写做 XXVII
, 即为 XX
+ V
+ II
思路
如果从左到右是从大到小,那么全部加起来就好
否则,如果左边比右边大的,要把左边的数加一个负号
那么怎么判断是不是左边大于右边呢?
遍历字符串,基准元素和右边相邻元素比,
如果左边大于右边,就相加,然后基准元素向右移到下一个元素(刚被加的元素),
如果基准元素小于右相邻元素,就把右边的这个元素拼一个负号,然后继续相加,且基准元素右移一个
解法一
class Solution:
map_d = {
‘I‘: 1,
‘V‘: 5,
‘X‘: 10,
‘L‘: 50,
‘C‘: 100,
‘D‘: 500,
‘M‘: 1000,
}
def romanToInt(self, s: str) -> int:
result = 0
length = len(s)
for index, num in enumerate(s):
value = Solution.map_d[num]
if index < length - 1 and value < Solution.map_d[s[index + 1]]:
result -= value
else:
result += value
return result
时间复杂度:O(n)
执行用时:40 ms
内存消耗:15 MB