• 微信公众号:美女很有趣。 工作之余,放松一下,关注即送10G+美女照片!

leetcode – 4.罗马数字转整数

开发技术 开发技术 5小时前 1次浏览

罗马数字转整数

题目

罗马数字转整数

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


程序员灯塔
转载请注明原文链接:leetcode – 4.罗马数字转整数
喜欢 (0)