这题要比罗马数字转整数难,
题目
输入整数,输出罗马数字。
示例 :
输入:num = 3749 输出: "MMMDCCXLIX"
思路
贪心法则:我们每次尽量使用最大的数来表示。 比如对于 1994 这个数,如果我们每次尽量用最大的数来表示,依次选 1000,900,90,4,会得到正确结果 MCMXCIV。
所以,我们将哈希表按照从大到小的顺序排列,然后遍历哈希表,直到表示完整个输入。
代码实现
class Solution:
def intToRoman(self, num: int) -> str:
val = [
1000, 900, 500, 400, # 千位和特殊情况:CM(900)和CD(400)
100, 90, 50, 40, # 百位和特殊情况:XC(90)和XL(40)
10, 9, 5, 4, # 十位和特殊情况:IX(9)和IV(4)
1 # 个位
]
# 对应的罗马数字符号,与上面的数值一一对应
syb = [
"M", "CM", "D", "CD", # 千位和特殊符号
"C", "XC", "L", "XL", # 百位和特殊符号
"X", "IX", "V", "IV", # 十位和特殊符号
"I" # 个位
]
# 用于存储最终的罗马数字字符串
roman_num = ''
# 初始化索引i,用于遍历val和syb列表
i = 0
# 使用while循环,当num大于0时持续执行
while num > 0:
# 计算当前罗马数字符号应该重复的次数
for _ in range(num // val[i]): # 例如,1987 // 1000 = 1,则M会添加一次
roman_num += syb[i] # 将对应的罗马数字符号添加到结果字符串中
num -= val[i] # 减去已转换的部分数值,例如1987 - 1000 = 987
# 继续处理下一个罗马数字符号
i += 1
# 返回最终转换完成的罗马数字字符串
return roman_num