欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

每天一道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'))

每天一道leetecode:13、罗马数字转整数(medium)

相关标签: leetecode