1. 程式人生 > 實用技巧 >洛谷 P5221 Product

洛谷 P5221 Product

羅馬數字轉整數

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'))