【简单】3、罗马数字转整数([simple] 3. Roman numeral to integer)

一、解题思路

【1】hashmap:枚举出所有可能,包含1个字母和两个字母的情况

【2】先截取2个字母,判断是否在hashmap中,有的话用hashmap.get获取value,坐标向后两位

【3】如果截取的两个字母不再hashmap中,则用当前的位置获取值,判断是否在hashmap中

def romanToInt(s):
        hashMap = {'I': 1, 'IV': 4, 'V': 5, 'IX': 9, 'X': 10, 'XL': 40, 'L': 50, 'XC': 90, 'C': 100, 'CD': 400, 'D': 500,'CM': 900, 'M': 1000}

        # 最终计算结果
        result = 0
        i = 0
        while i < len(s):
            # 按照字符串的2位,2位截取,因为最多是2个罗马字母代表1个数
            str1 = s[i:i+2]
            # 判断str1是不是在hashmap中
            if str1 in hashMap:
                # 拿到对应的value值
                result += hashMap.get(str1)
                # 坐标向后移动2位
                i += 2
            else:
                # 截取1个字符串就可以,拿到对应的hashmap的value
                result += hashMap.get(s[i])
                # 坐标向后移动1位
                i += 1
        return result
————————

1、 Problem solving ideas

【1】 HashMap: list all possible cases, including one letter and two letters

【2】 First intercept two letters to determine whether they are in HashMap. If yes, use HashMap Get gets the value, and the coordinates are two digits backward

【3】 If the two intercepted letters are no longer in the HashMap, the current position is used to obtain the value to judge whether they are in the HashMap

def romanToInt(s):
        hashMap = {'I': 1, 'IV': 4, 'V': 5, 'IX': 9, 'X': 10, 'XL': 40, 'L': 50, 'XC': 90, 'C': 100, 'CD': 400, 'D': 500,'CM': 900, 'M': 1000}

        # 最终计算结果
        result = 0
        i = 0
        while i < len(s):
            # 按照字符串的2位,2位截取,因为最多是2个罗马字母代表1个数
            str1 = s[i:i+2]
            # 判断str1是不是在hashmap中
            if str1 in hashMap:
                # 拿到对应的value值
                result += hashMap.get(str1)
                # 坐标向后移动2位
                i += 2
            else:
                # 截取1个字符串就可以,拿到对应的hashmap的value
                result += hashMap.get(s[i])
                # 坐标向后移动1位
                i += 1
        return result