1. 问题描述:
2. 解决办法:
class Solution(object):
def intToRoman(self, num):
"""
:type num: int
:rtype: str
"""
roman = ""
num_reverse = str(num)[::-1]
num_order = len(str(num))
for i in range(num_order-1, -1, -1):
if i == 0:
uni = int(num_reverse[i])
if uni < 4:
roman += uni*"I"
elif uni == 4:
roman += "IV"
elif uni == 5:
roman += "V"
elif uni == 9:
roman += "IX"
else:
roman += "V"+"I"*(uni-5)
elif i == 1:
deci = int(num_reverse[i])
if deci < 4:
roman += deci * "X"
elif deci == 4:
roman += "XL"
elif deci == 5:
roman += "L"
elif deci == 9:
roman += "XC"
else:
roman += "L"+"X"*(deci-5)
elif i == 2:
order = int(num_reverse[i])
if order < 4:
roman += order*"C"
elif order == 4:
roman += "CD"
elif order == 5:
roman += "D"
elif order == 9:
roman += "CM"
else:
roman += "D"+"C"*(order-5)
else:
order = int(num_reverse[i])
roman += order * "M"
return roman
def intToRoman2(self, num):
nums = [1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1]
romans = ['M', 'CM', 'D', 'CD', 'C', 'XC', 'L', 'XL', 'X', 'IX', 'V', 'IV', 'I']
i = 0
roman = ""
while num > 0:
if num - nums[i] >= 0:
roman += romans[i]
num -= nums[i]
else:
i += 1
return roman
s = Solution()
a = s.intToRoman2(58)
print(a)
3. 个人感想:
(1)方法1是完全自己写的,最直接的想法,但是这样判断过于繁琐
但是在这个过程中发现了取个位、十位等的一个方法,把int转成str,然后直接取
(2)第二种方法是从网上找的:
有多少个某个的方法,不断减它,是否大于等于