您的位置:首页 > 编程语言 > Python开发

[LeetCode]12. Integer to Roman解法及python代码

2018-01-21 13:54 645 查看
原题链接: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", <
4000
span class="hljs-string">"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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  python leetcode