罗马数字与阿拉伯数字对应关系如下:
且“II”表示2,“III”表示3,“IV”表示4,“VI表示6”,“VII”表示7,“VIII”表示8,“IX”表示9,其余的类似。
阿拉伯数转换成罗马数字
class Solution(object):
def intToRoman(self, num):
"""
:type num: int
:rtype: str
"""
if not num:
return ""
out = ""
i = 3
while i >= 0:
out += self.get_roman(i,num//(10**i))
num %= (10**i)
i -= 1
return out
def get_roman(self,power,quotient):
power_to_roman = {0:["I","V","X"],1:["X","L","C"],2:["C","D","M"],3:["M"]}
romans = power_to_roman[power]
if quotient <= 3:
out = quotient*romans[0]
elif quotient == 4:
out = romans[0]+romans[1]
elif quotient == 5:
out = romans[1]
elif quotient <= 8:
out = romans[1]+(quotient-5)*romans[0]
else:
out = romans[0]+romans[2]
return out
罗马数字转换为阿拉伯数字:
class Solution(object):
def romanToInt(self, s):
"""
:type s: str
:rtype: int
"""
if not s:
return 0
Roman_to_num = {'I':1,"V":5,"X":10,"L":50,"C":100,"D":500,"M":1000}
before = {"V":"I","X":"I","L":"X","C":"X","D":"C","M":"C"}
stack = []
num = 0
i = len(s)-1
while i >= 0:
if not stack:
stack.append(s[i])
else:
last = stack.pop()
if last in before and s[i] == before[last]:
num += Roman_to_num[last] - Roman_to_num[s[i]]
else:
stack.append(last)
stack.append(s[i])
i -= 1
for i in stack:
num += Roman_to_num[i]
return num