LeetCode 12. 整数转罗马数字 — Python3 实现解题思路贪心算法罗马数字的本质是从大到小依次匹配。把所有可能的数值-符号组合包括 4、9、40、90 等特殊组合按从大到小排列每次取当前能匹配的最大值直到 num 减为 0。由于罗马数字的组合是有限的13 种时间和空间复杂度均为 O(1)。完整代码pythonclass Solution:def intToRoman(self, num: int) - str:# 从大到小排列所有可能的数值-符号组合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),]res []for value, symbol in value_symbols:while num value:res.append(symbol)num - valueif num 0:breakreturn .join(res)执行示例以 num 1994 为例步骤 当前 num 匹配 结果累积1 1994 1000 → M M剩 9942 994 900 → CM MCM剩 943 94 90 → XC MCMXC剩 44 4 4 → IV MCMXCIV剩 0输出 MCMXCIV ✅复杂度分析- 时间复杂度O(1)循环次数不超过 13 次内层 while 最多执行有限次M 最多 3 次等。- 空间复杂度O(1)仅使用固定大小的列表和字符串。备选写法整除优化把 while 换成整除减少循环次数逻辑等价pythonclass Solution:def intToRoman(self, num: int) - str: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),]res []for value, symbol in value_symbols:count, num divmod(num, value)if count:res.append(symbol * count)return .join(res)两种写法均可直接提交通过。