难度:中等
题目描述:
思路:
这题是罗马数字系列的第二题,上一题罗马数字转整数,映射起来比较简单。这题也是纯靠映射,从后往前开始,设置一个乘数因子,然后碰到4或者9特殊判断一下。
class Solution:
def intToRoman(self, num: int) -> str:
#思路:从后往前,用fact作为基数,遇到4和9则进行判断
subs = {1000: 'M', 900: 'CM', 500: 'D', 400: 'CD', 100: 'C', 90: 'XC', 50: 'L', 40: 'XL', 10: 'X', 9: 'IX', 5: 'V', 4: 'IV', 1: 'I'}
res = ""
num = str(num)
mulfct = 1
for i in range(len(num)-1, -1, -1):
tmp = int(num[i]) * mulfct
mulfct *= 10
if num[i] == "4":
res = subs[tmp] + res
continue
elif num[i] == "9":
res = subs[tmp] + res
continue
tmp_res = ""
for i in subs:
while tmp > 0 and tmp - i >= 0:
tmp -= i
tmp_res += subs[i]
# tmp_res = tmp_res[::-1]
res = tmp_res + res
return res