leetcode - 4.罗马数字转整数

罗马数字转整数

题目

罗马数字转整数

例如, 罗马数字 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

posted @ 2021-07-21 23:38  我是一言  阅读(35)  评论(0编辑  收藏  举报