原题链接:https://leetcode.com/problems/integer-to-roman
这个题我最开始的想法很简单,由于限制输入在1~3999之间,所以可以写出1~10,10~3999间的能整除10的数的罗马数字,对于输入使用整数除法以及求余处理就可以O(1)的得到结果,下面代码:
class Solution(object):
def intToRoman1(self, num):
"""
:type num: int
:rtype: str
"""
M = ["", "M", "MM", "MMM"]
C = ["", "C", "CC", "CCC", "CD", "D", "DC", "DCC", "DCCC", "CM"]
X = ["", "X", "XX", "XXX", "XL", "L", "LX", "LXX", "LXXX", "XC"]
I = ["", "I", "II", "III", "IV", "V", "VI", "VII", "VIII", "IX"]
return M[num/1000] + C[(num%1000)/100] + X[(num%100)/10] + I[num%10]
接下来的代码纯粹出于个人练习,提高coding能力。因为这种题主要是规律的总结,需要在写的过程中比较细心,下面是代码,主要注意的点就是4和9的处理上:
class Solution(object):
"""
锻炼能力的方法
"""
def intToRoman(self, num):
"""
:type num: int
:rtype: str
"""
base = ["I","II","III","IV","V","VI","VII","VIII","IX","X","L","C","D","M"]
baseNum = 1000
romanStr = ""
while num > 10:
temp = num/baseNum
if temp !=0:
if baseNum == 1000:
for i in range(temp):
romanStr = romanStr + base[13]
num = num - temp*baseNum
baseNum = baseNum/10
continue
if baseNum == 100:
if temp < 4:
for i in range(temp):
romanStr = romanStr + base[11]
elif temp == 4:
romanStr = romanStr + base[11] + base[12]
elif temp > 4 and temp <9:
romanStr = romanStr + base[12]
for i in range(temp-5):
romanStr = romanStr + base[11]
else:
romanStr = romanStr + base[11] + base[13]
num = num - temp*baseNum
baseNum = baseNum/10
continue
if baseNum == 10:
if temp < 4:
for i in range(temp):
romanStr = romanStr + base[9]
elif temp == 4:
romanStr = romanStr + base[9] + base[10]
elif temp > 4 and temp <9:
romanStr = romanStr + base[10]
for i in range(temp-5):
romanStr = romanStr + base[9]
else:
romanStr = romanStr + base[9] + base[11]
num = num - temp*baseNum
baseNum = baseNum/10
continue
else:
baseNum = baseNum/10
if num != 0:
romanStr = romanStr + base[num-1]
return romanStr
本文介绍了一种将整数转换为罗马数字的算法实现,通过构建特定的映射关系和处理特殊情况,如4和9的表示,实现了从1到3999范围内整数的有效转换。
3379

被折叠的 条评论
为什么被折叠?



