解题思路
1.首先,将值与对应字符用字典来表示,然后将符号对应的值按有序顺序存储至列表中sums
2.将要转换的整数转换成列表形式,遍历列表,每次遍历:
- 将值取出来算出对应所在位置的实际值 如 32 对应列表 [3,2] 则 3实际值应为 3 x 101 = 30 2
实际值为 2 x 100 - 计算出实际值后,将对应的值替换成对应的罗马字符,此时从列表末尾开始遍历sums,找到列表比实际值小的第一个值,这个值所代表的键值对即为实际值要替换罗马数字的一部分,依次查找至实际值=0,则代表已找到此实际值所表示的罗马数字
代码
python
class Solution(object):
def intToRoman(self, num):
"""
:type num: int
:rtype: str
"""
dict1 = {
"1":"I",
"4":"IV",
"5":"V",
"9":"IX",
"10":"X",
"40":"XL",
"50":"L",
"90":"XC",
"100":"C",
"400":"CD",
"500":"D",
"900":"CM",
"1000":"M"
}
sums = [1,4,5,9,10,40,50,90,100,400,500,900,1000]
s = ''
t = [int(i) for i in list(str(num))]
count = len(t)
for i in range(count):
nums = t[i]*pow(10,count-i-1)
while nums>0:
for j in range(len(sums)):
if sums[len(sums)-1-j]<=nums:
s=s+dict1[str(sums[len(sums)-1-j])]
nums-=sums[len(sums)-1-j]
break
return s