IntegerToRoman

自己写的

def romanToInt(s):
    M = ["", "M", "MM", "MMM"]
    C = ["", "C", "CC", "CCC", "CD", "D", "DC", "DCC", "DCCC", "CM"]
    X = ["", "X", "XX", "XXX", "XL", "L", "LX", "LXX", "LXXX", "XC"]
    I = ["", "I", "II", "III", "IV", "V", "VI", "VII", "VIII", "IX"]

    replace_list = ['MD', 'MC', 'ML', 'MX', 'MV', 'MI',
                    'CL', 'CX', 'CV', 'CI',
                    'DL', 'DX', 'DV', 'DI',
                    'LV', 'LI', 'XV', 'XI']
    for str in replace_list:
        if str in s:
            s = s.replace(str, str[0] + ',' + str[1])
    n = s.split(',')
    ans = 0
    for nu in n:
        if nu in M:
            ans += M.index(nu)*1000
        elif nu in C:
            ans += C.index(nu)*100
        elif nu in X:
            ans += X.index(nu)*10
        elif nu in I:
            ans += I.index(nu)*1
    return ans


print(romanToInt('DCCCLXXV'))

评论里面的 ,感觉很巧妙

l = {'M':1000, 'D':500, 'C':100, 'L':50, 'X':10, 'V':5, 'I':1}
    result = 0
    for i in range(len(s)):
        result += l[s[i]]
        if i > 0 and l[s[i-1]] < l[s[i]]:
            result -= l[s[i-1]]*2
    return result

所有字符值加起来,如果某个字符比右边的小,减去它的二倍。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值