今天的题目是13. 罗马数字转整数
简单的题还是搞的定的,就是效率貌似不高,正常遍历,顺便处理特诉情况
class Solution:
def romanToInt(self, s: str) -> int:
# 7种字母对应数字表
dic = {'I':1, 'V':5, 'X':10, 'L':50, 'C':100, 'D':500, 'M':1000}
# 6种特殊情况数组
dic_sp = ('IV', 'IX', 'XL', 'XC', 'CD', 'CM')
# 存放结果变量
sum = 0
# 存放上次字母
pre = ''
# 循环遍历罗马数字
for char in s:
# 如果和前一个字母组成特殊组合
if (pre + char) in dic_sp:
# 则前一次的结果应该2倍冲销(加1,变减2)
sum -= dic[pre] * 2
# 记录上个字母
pre = char
# 累加本次字母对应数字
sum += dic[char]
return sum
3999/3999 cases passed (56 ms)
Your runtime beats 58.49 % of python3 submissions
Your memory usage beats 5.09 % of python3 submissions (13.5 MB)
看了一下精选的题解,两行。。。
class Solution:
def romanToInt(self, s: str) -> int:
d = {'I':1, 'IV':3, 'V':5, 'IX':8, 'X':10, 'XL':30, 'L':50, 'XC':80, 'C':100, 'CD':300, 'D':500, 'CM':800, 'M':1000}
return sum(d.get(s[max(i-1, 0):i+1], d[n]) for i, n in enumerate(s))
3999/3999 cases passed (64 ms)
Your runtime beats 36.49 % of python3 submissions
Your memory usage beats 5.09 % of python3 submissions (13.5 MB)
简洁,不过执行效率貌似也不咋地。