12. 整数转罗马数字
https://leetcode-cn.com/problems/integer-to-roman/
解法一:套规则
思路:特别蠢
罗马数字特点是“左减右加” (https://zhidao.baidu.com/question/13702383) 先将num的个十百千位取出来,然后从高到低逐位判断并输出即可。
class Solution:
def intToRoman(self, num: int) -> str:
res = ""
#获取各位
ones = num % 10
tens = (num // 10) % 10
hundreds = (num // 100) % 10
thousands = (num // 1000) % 10
for _ in range(thousands): #处理千位
res += "M"
#处理百位
if hundreds == 4:
res += "CD"
elif hundreds == 9:
res += "CM"
elif hundreds > 4 and hundreds < 9:
res += "D"
for _ in range(hundreds - 5):
res += "C"
elif hundreds > 0 and hundreds < 4:
for _ in range(hundreds):
res += "C"
#处理十位
if tens == 4:
res += "XL"
elif tens == 9:
res += "XC"
elif tens > 4 and tens < 9:
res += "L"
for _ in range(tens - 5):
res += "X"
elif tens > 0 and tens < 4:
for _ in range(tens):
res += "X"
#处理个位
if ones == 4:
res += "IV"
elif ones == 9:
res += "IX"
elif ones > 4 and ones < 9:
res += "V"
for _ in range(ones - 5):
res += "I"
elif ones > 0 and ones < 4:
for _ in range(ones):
res += "I"
return res解法二:映射
实际上跟解法一差不多,求出各数位的数字,然后映射到表里即可。
解法三:
只考虑右加,不考虑左减,将10,9,5,4,1这些数从大到小都列入values,对应表示列入reps。
遍历values,遇到比num小的数就自减,并从左到右输出表示,直到num=0
更简略的写法,数值和表示作为二元组写在一个表里:
最后更新于