洛谷 P5221 Product
阿新 • • 發佈:2021-01-21
羅馬數字轉整數
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'))