罗马数字转整数
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'))