一. 题目
- 题目
- 示例
二. 方法一
-
解题思路
这个方法应该只要看代码就能理解, 不过缺点是代码太长了, 容易出错 -
解题代码
def intToRoman(self, num: int) -> str: str1 = "" # 因为num < 4000, 所以千位时不需要考虑 大于等于4的情况 if num >= 1000: n1 = num // 1000 # 千位是几就添加几个"M" str1 += "M" * n1 num -= 1000 * n1 if num >= 100: n2 = num // 100 # 如果百位是9, 就添加"CM" if n2 == 9: str1 += "CM" # 如果百位是4, 就添加"CD" if n2 == 4: str1 += "CD" # 如果百位在[5, 9) if 5 <= n2 < 9: str1 += "D" str1 += "C" * (n2 - 5) # 如果百位在[0, 4) if 0 <= n2 < 4: str1 += "C" * n2 num -= 100 * n2 if num >= 10: n3 = num // 10 if n3 == 9: str1 += "XC" if n3 == 4: str1 += "XL" if 5 <= n3 < 9: str1 += "L" str1 += "X" * (n3 - 5) if 0 <= n3 < 4: str1 += "X" * n3 num -= 10 * n3 if num == 9: str1 += "IX" if num == 4: str1 += "IV" if 5 <= num < 9: str1 += "V" str1 += "I" * (num - 5) if 0 <= num < 4: str1 += "I" * num return str1
-
分析
时间复杂度: O(1)
空间复杂度: O(1)
三. 方法二: 硬编码数字
-
解题思路
列表中存放每一位上可能的罗马数字表示情况
然后进行匹配即可 -
解题代码
def intToRoman(num: int) -> str: thousands = ["", "M", "MM", "MMM"] hundreds = ["", "C", "CC", "CCC", "CD", "D", "DC", "DCC", "DCCC", "CM"] tens = ["", "X", "XX", "XXX", "XL", "L", "LX", "LXX", "LXXX", "XC"] ones = ["", "I", "II", "III", "IV", "V", "VI", "VII", "VIII", "IX"] n1 = num // 1000 n2 = num % 1000 // 100 n3 = num % 100 // 10 n4 = num % 10 return thousands[n1] + hundreds[n2] + tens[n3] + ones[n4]
-
分析
时间复杂度: O(1)
空间复杂度: O(1)