这个其实开始有点那种题目的意思了,总体难度不大,但是Python中的语言特性吧..其实这个题以C ++或者java的写会更简单一点,或者Python的走双端队列的路子会比较好弄?这个问题有时间再去考虑吧emmm ......因为不想当“调包侠”,所以决定还是传统一点。
上代码!
class Solution:
def romanToInt(self, s):
"""
:type s: str
:rtype: int
"""
list_roma = ['I','V','X','L','C','D','M']
list_arab = [1,5,10,50,100,500,1000]
roma_arab = dict(zip(list_roma,list_arab))
# 生成字典
sum = 0
flag1 = True
# 判定组合数字中的后一位不被重复计算
for i in range(0,len(s)):
if not flag1:
flag1 = True
continue
elif i == len(s)-1:
return sum + roma_arab[s[i]]
else:
flag2 = True
# 判定是否会出现组合数字
for index in (0,2,4):
if(s[i] == list_roma[index]):
if(s[i+1] == list_roma[index+1] or s[i+1] == list_roma[index+2]):
sum += roma_arab[s[i+1]] - roma_arab[s[i]]
flag1 = False
flag2 = False
if flag2:
sum += roma_arab[s[i]]
return sum
基本思路:
1.先开一个罗马数字和阿拉伯数字的对应字典,姑且叫roma_arab吧(没文化瞎起的表情符号名)
2.引入FLAG1与FLAG2作为判定的标志,具体在注释里
3.判定组合数的地方用了一个循环..如果嵌套太麻烦,虽然这样写也没多明智
坑:
会有一个越界的判断,但这是小事,真正残暴的是 - 测试用例没有双引号!!!!千万不要被蒙骗!!!!
像个傻子一样调试半天才意识到这个问题「(°ヘ°)
别说那去日苦多一时朝阳破烟萝