12. 整数转罗马数字
一、题目
罗马数字包含以下七种字符: I
, V
, X
, L
,C
,D
和 M
。
二、思路
根据罗马数字的唯一表示法,为了表示一个给定的整数 num,我们寻找不超过 num 的最大符号值,将 num 减去该符号值,然后继续寻找不超过 num 的最大符号值,将该符号拼接在上一个找到的符号之后,循环直至 num 为 0。最后得到的字符串即为 num 的罗马数字表示。
三、代码
class Solution: VALUE_SYMBOLS = [ (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"), ] def intToRoman(self, num: int) -> str: roman = list() for value, symbol in Solution.VALUE_SYMBOLS: while num >= value: num -= value roman.append(symbol) if num == 0: break return "".join(roman)
四、分析
复杂度分析
时间复杂度:O(1)。由于 valueSymbols 长度是固定的,且这 13 字符中的每个字符的出现次数均不会超过 3,因此循环次数有一个确定的上限。对于本题给出的数据范围,循环次数不会超过 15 次。
空间复杂度:O(1)。