唉。。。先贴上自己菜菜的超过时间限制的辣鸡代码
过久的判断确实不好
应该减少判断
class Solution:
def romanToInt(self, s: str) -> int:
num_list={
'I':1,
'IV':4,
'V':5,
'IX':9,
'X':10,
'XL':40,
'L':50,
'XC':90,
'C':100,
'CD':400,
'D':500,
'CM':900,
'M':1000
}
result=0
for i in range(len(s)):
result+=num_list[s[i]]
while (i+1)<len(s):
if (s[i]=='I' and (s[i+1]=='V' or s[i+1]=='X')) or (s[i]=='X' and (s[i+1]=='L' or s[i+1]=='C')) or (s[i]=='C' and (s[i+1]=='D' or s[i+1]=='M')) :
result-=2*num_list[s[i]]
return result
enumerate返回字符串的字符对应的 位置以及内容
get()里面有两个变量,一个检测双字符(如果双字符代表数字,那么会返回要一个数,如果不代表数字,则不会返回数),一个检测单字符(必然返回数),
使用字典的时候,不能用()或者{}来取出数据,应该使用[ ]…这个小地方真是卡了半天。。。。
再附上题解上看到的精妙的。。。算法
这个sum也太方便了把,里面如果有两个数字的话可以出来,还可以同时处理系统里面的循环出来的数据,amazing
class Solution:
def romanToInt(self, s: str) -> int:
num_list={
'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(num_list.get(s[max(i-1,0):i+1], num_list[n]) for i ,n in enumerate(s))