罗马数字转整数

罗马数字转整数

1、题目:

2、代码

罗马数字转整数
'''
思路一:首先将罗马字符和数字的对应关系放到字典里,循环遍历,将循环到的字符和当前的字符加后一位的比较,如果只拿到当前循环的字符则累加返回结果,如果拿到的
后两个字符是特殊字符,则将当前的字符用当前的字符加后一位字符覆盖,再依次累加得出结果,如果循环到最后一位的时候,取到两个结果相同,则将当前的字符再累加
'''
class Solution:
    roman_dic = {
        'I': 1, 'V': 5, 'X': 10, 'L': 50, 'C': 100, 'D': 500, 'M': 1000,
        'IV': 4, 'IX': 9,
        'XL': 40, 'XC': 90,
        'CD': 400, 'CM': 900,
    }
    def romanToInt(self,s):
        number = 0
        flag = False
        for n,i in enumerate(s):
            if flag:
                flag = False
                continue
            num1 = self.roman_dic.get(i)
            num2 = self.roman_dic.get(s[n:n+2])
            if num2 is not None and num1 != num2:
                num1 = num2
                flag = True
            number += num1
        return number

s = Solution()
print(s.romanToInt('LVIII'))

'''
思路二:循环遍历字符串,如果当前的字符比下一个字符小,则为特殊字符,用下一个字符减去当前的字符,覆盖当前拿到的这个数字,再用continue跳出下一个循环
'''

class Solution:
    roman_dic = {
        'I': 1, 'V': 5, 'X': 10, 'L': 50, 'C': 100, 'D': 500, 'M': 1000,
        'IV': 4, 'IX': 9,
        'XL': 40, 'XC': 90,
        'CD': 400, 'CM': 900,
    }

    def romanToInt(self, s):
        number = 0
        flag = False
        for n,i in enumerate(s):
            if flag:
                flag = False
                continue

            num1 = self.roman_dic.get(i)
            if n == len(s)-1:
                number += num1
                break
            num2 = self.roman_dic.get(s[n+1])
            if num1 < num2:
                num1 = num2-num1
                flag = True

            number += num1
        return number

s = Solution()
print(s.romanToInt('LVIII'))
原文地址:https://www.cnblogs.com/HavenBlog/p/14307836.html