罗马数字与阿拉伯数字对应关系如下:
且“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