三个月前做的一道题,变成了今天的每日一题了,看样子不记录一下果然还是很快就会忘。
题目描述
地址:罗马数字转整数
解法一
虽然题目给了罗马数字转整数的六种特殊情况,但是实际上,本题的核心在于,将罗马数组转为整数的过程中,需要观察前后两个数的大小关系,如果前面一个数比后面的数小,那么久需要减去这个前面这个数,反之,就是要加上这个数。逻辑很简单,那么我们再把每一个字母代表的数字对应起来,然后遍历一遍给出的字符串就可以了。
class Solution:
def romanToInt(self, s: str) -> int:
prenum = self.getChar(s[0])
n = len(s)
num = 0
for i in range(1,n):
t = self.getChar(s[i])
if t > prenum:
num = num - prenum
else:
num = num + prenum
prenum = t
num += prenum
return num
def getChar(self, c):
if c == "I":
return 1
elif c == "V":
return 5
elif c == "X":
return 10
elif c == "L":
return 50
elif c == "C":
return 100
elif c == "D":
return 500
elif c == "M":
return 1000
else:
return 0
字母与数字的对于也可以直接使用字典来对应:
class Solution(object):
def romanToInt(self,s):
"""
:type s: str
:rtype: int
"""
num_dict = {'I':1,'V':5,'X':10,'L':50,'C':100,'D':500,'M':1000}
sum = 0
prenum = num_dict[s[0]]
for i in range(1,len(s)):
num = num_dict[s[i]]
if prenum<num:
sum = sum - prenum
else:
sum = sum + prenum
prenum = num
return sum + prenum