每天一道leetecode:13、罗马数字转整数(medium)
程序员文章站
2022-07-14 07:58:00
...
有点崩啊,兄弟们,一天一道leetecode不太现实啊,哭哭。
其实还是找借口,哈哈,坚持不下来也是一个问题。。。
刚刚把论文的中文版本定好了,准备明天交给老师审查一下。
言归正传,这个题仍然很简单,没有什么好说的,一个一个写出来就OK了。
话说开始的时候我还耍小聪明,想直接用12题,然后遍历一个大数找到返回,哈哈,果不其然,超时了。。。
对了,通过这道题学到了一个重点!!!!就是python里面的for循环的i,不能根据内部的变化而变化。
比如:
for i in range(5):
i = i + 2
print(i)
输出:2、3、4、5、6.
所以,如果想在循环里更改i,那么只能用while来实现了!!!
完整代码:
'''
1、4、5、9、 I、IV、V、IX
10、40、50、90、X、XL、L、XC
100、400、500、900、1000 C、CD、D、CM、M、
'''
def romanToInt(s):
sum = 0
i = 0
while i < len(s)-1:
if s[i] == 'C' and s[i+1] == 'M':
sum += 900
i = i + 2
elif s[i] == 'C' and s[i+1] == 'D':
sum += 400
i = i + 2
elif s[i] == 'X' and s[i+1] == 'C':
sum += 90
i = i + 2
elif s[i] == 'X' and s[i+1] == 'L':
sum += 40
i = i + 2
elif s[i] == 'I' and s[i+1] == 'X':
sum += 9
i = i + 2
elif s[i] == 'I' and s[i+1] == 'V':
sum += 4
i = i + 2
elif s[i] == 'M':
sum += 1000
i += 1
elif s[i] == 'D':
sum += 500
i += 1
elif s[i] == 'C':
sum += 100
i += 1
elif s[i] == 'L':
sum += 50
i += 1
elif s[i] == 'X':
sum += 10
i += 1
elif s[i] == 'V':
sum += 5
i += 1
elif s[i] == 'I':
sum += 1
i += 1
if i == len(s):
return sum
elif i == len(s) - 1:
if s[i] == 'M':
sum += 1000
elif s[i] == 'D':
sum += 500
elif s[i] == 'C':
sum += 100
elif s[i] == 'L':
sum += 50
elif s[i] == 'X':
sum += 10
elif s[i] == 'V':
sum += 5
elif s[i] == 'I':
sum += 1
return sum
print(romanToInt('III'))
print(romanToInt('IV'))
print(romanToInt('IX'))
print(romanToInt('LVIII'))
print(romanToInt('MCMXCIV'))
print(romanToInt('V'))