leetcode 12. 整数转罗马数字

打印 上一主题 下一主题

主题 533|帖子 533|积分 1599



解题思路
1.首先,将值与对应字符用字典来表示,然后将符号对应的值按有序顺序存储至列表中sums
2.将要转换的整数转换成列表形式,遍历列表,每次遍历:


  • 将值取出来算出对应地点位置的现实值 如 32 对应列表 [3,2] 则 3现实值应为 3 x 101 = 30 2
    现实值为 2 x 10
    0
  • 盘算出现实值后,将对应的值替换成对应的罗马字符,此时从列表末尾开始遍历sums,找到列表比现实值小的第一个值,这个值所代表的键值对即为现实值要替换罗马数字的一部分,依次查找至现实值=0,则代表已找到此现实值所表示的罗马数字
代码
  1. class Solution(object):
  2.     def intToRoman(self, num):
  3.         """
  4.         :type num: int
  5.         :rtype: str
  6.         """
  7.         dict1 = {
  8.             "1":"I",
  9.             "4":"IV",
  10.             "5":"V",
  11.             "9":"IX",
  12.             "10":"X",
  13.             "40":"XL",
  14.             "50":"L",
  15.             "90":"XC",
  16.             "100":"C",
  17.             "400":"CD",
  18.             "500":"D",
  19.             "900":"CM",
  20.             "1000":"M"
  21.         }
  22.         sums = [1,4,5,9,10,40,50,90,100,400,500,900,1000]
  23.         s = ''
  24.         t = [int(i) for i in list(str(num))]
  25.         count = len(t)
  26.         for i in range(count):
  27.             nums = t[i]*pow(10,count-i-1)
  28.             while nums>0:
  29.                 for j in range(len(sums)):
  30.                     if sums[len(sums)-1-j]<=nums:
  31.                         s=s+dict1[str(sums[len(sums)-1-j])]
  32.                         nums-=sums[len(sums)-1-j]
  33.                         break
  34.         return s
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

正序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

温锦文欧普厨电及净水器总代理

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表