题目描述:
七个不同的符号代表罗马数字,其值如下:
符号 | 值 |
---|---|
I | 1 |
V | 5 |
X | 10 |
L | 50 |
C | 100 |
D | 500 |
M | 1000 |
罗马数字是通过添加从最高到最低的小数位值的转换而形成的。将小数位值转换为罗马数字有以下规则:
- 如果该值不是以 4 或 9 开头,请选择可以从输入中减去的最大值的符号,将该符号附加到结果,减去其值,然后将其余部分转换为罗马数字。
- 如果该值以 4 或 9 开头,使用 减法形式,表示从以下符号中减去一个符号,例如 4 是 5 (
V
) 减 1 (I
):IV
,9 是 10 (X
) 减 1 (I
):IX
。仅使用以下减法形式:4 (IV
),9 (IX
),40 (XL
),90 (XC
),400 (CD
) 和 900 (CM
)。 - 只有 10 的次方(
I
,X
,C
,M
)最多可以连续附加 3 次以代表 10 的倍数。你不能多次附加 5 (V
),50 (L
) 或 500 (D
)。如果需要将符号附加4次,请使用 减法形式。
给定一个整数,将其转换为罗马数字
输入输出实例:
思路:对于这道题目,我们可以构建一个数字与罗马符号的映射表,然后从高位到低位进行转化,需要注意的是,在我们的映射表中,需要把4,9,40,90,400,900这几个特殊的数字及其符号加入,然后我们逐渐减小num的值,每次减去最大值的符号对于的值(所以需要我们做一个num>符号对应值的判断),每次减去一个罗马符号对应的值,然后把这个罗马符号加入到最后我们返回的字符串中。对于上述思路,有以下代码:
class Solution:
def intToRoman(self, num: int) -> str:
value_map = [(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')
]
ans = ''
for count,roma in value_map:
while num >= count :
ans += roma
num -= count
return ans