首页 > 其他分享 >12. 整数转罗马数字

12. 整数转罗马数字

时间:2023-07-01 14:44:39浏览次数:61  
标签:12 keys 50 整数 罗马数字 100 1000

难度中等

罗马数字包含以下七种字符: I, V, X, LCD 和 M

字符          数值
I             1
V             5
X             10
L             50
C             100
D             500
M             1000

例如, 罗马数字 2 写做 II ,即为两个并列的 1。12 写做 XII ,即为 X + II 。 27 写做  XXVII, 即为 XX + V + II 。

通常情况下,罗马数字中小的数字在大的数字的右边。但也存在特例,例如 4 不写做 IIII,而是 IV。数字 1 在数字 5 的左边,所表示的数等于大数 5 减小数 1 得到的数值 4 。同样地,数字 9 表示为 IX。这个特殊的规则只适用于以下六种情况:

  • I 可以放在 V (5) 和 X (10) 的左边,来表示 4 和 9。
  • X 可以放在 L (50) 和 C (100) 的左边,来表示 40 和 90。 
  • C 可以放在 D (500) 和 M (1000) 的左边,来表示 400 和 900。

给你一个整数,将其转为罗马数字。

 

贪心法则:我们每次尽量使用最大的数来表示。 比如对于 1994 这个数,如果我们每次尽量用最大的数来表示,依次选 1000,900,90,4,会得到正确结果 MCMXCIV。

所以,我们将哈希表按照从大到小的顺序排列,然后遍历哈希表,直到表示完整个输入。

 

class Solution:
    def intToRoman(self, num: int) -> str:
        hashmap = {1000:'M', 900:'CM', 500:'D', 400:'CD', 100:'C', 90:'XC', 50:'L', 40:'XL', 10:'X', 9:'IX', 5:'V', 4:'IV', 1:'I'}
        res = ""
        keys = sorted(hashmap.keys(),key = lambda x:-x)
        for i in range(len(keys)):
            kk = keys[i]
            if  kk <=num:
                for _ in range(num//kk):
                    num = num-kk
                    res += hashmap[kk]
        return res

 

标签:12,keys,50,整数,罗马数字,100,1000
From: https://www.cnblogs.com/zle1992/p/17519267.html

相关文章

  • SFP3012-ASEMI代理MHCHXM(海矽美)快恢复二极管SFP3012
    编辑:llSFP3012-ASEMI代理MHCHXM(海矽美)二极管SFP3012型号:SFP3012品牌:MHCHXM(海矽美)封装:TO-247AB恢复时间:≤65ns正向电流:30A反向耐压:1200V芯片个数:双芯片引脚数量:3类型:快恢复二极管特性:快恢复、大电流浪涌电流:160A*2正向压降:1.75V~2.2V封装尺寸:如图工作温度:-40°C~175°CSFP3012特性超......
  • SFP3012-ASEMI代理MHCHXM(海矽美)快恢复二极管SFP3012
    编辑:llSFP3012-ASEMI代理MHCHXM(海矽美)二极管SFP3012型号:SFP3012品牌:MHCHXM(海矽美)封装:TO-247AB恢复时间:≤65ns正向电流:30A反向耐压:1200V芯片个数:双芯片引脚数量:3类型:快恢复二极管特性:快恢复、大电流浪涌电流:160A*2正向压降:1.75V~2.2V封装尺寸:如图工作温度:-40°C~175......
  • [COCI2011-2012#5] EKO / 砍树
    [COCI2011-2012#5]EKO/砍树题目描述伐木工人Mirko需要砍\(M\)米长的木材。对Mirko来说这是很简单的工作,因为他有一个漂亮的新伐木机,可以如野火一般砍伐森林。不过,Mirko只被允许砍伐一排树。Mirko的伐木机工作流程如下:Mirko设置一个高度参数\(H\)(米),伐木机升起一个......
  • 1012. 友好城市
    Palmia国有一条横贯东西的大河,河有笔直的南北两岸,岸上各有位置各不相同的N个城市。北岸的每个城市有且仅有一个友好城市在南岸,而且不同城市的友好城市不相同。每对友好城市都向政府申请在河上开辟一条直线航道连接两个城市,但是由于河上雾太大,政府决定避免任意两条航道交叉,以避免......
  • 工作中必备的12个Git命令
    前言以下是工作中必备的12个Git命令,包括创建和初始化仓库、克隆远程仓库、添加和提交文件、查看状态和历史记录、创建和切换分支、合并分支以及推送和拉取远程仓库等操作。掌握这些命令可以帮助你进行基本的版本控制和团队协作。在日常使用中,熟练掌握这些命令将提高你的Git工作效......
  • Debian 12 (bookworm) 安装方法及其国内软件源
    摘要:Debian12(bookworm)已经于2023年6月份正式发布。以下为原来信息:Debian12(bookworm)预计于2023年中期发布,但是目前(2023年4月)已经处于硬冻结阶段。原计划是在2023年中发布正式版本,但“Bookwo...Debian12(bookworm)已经于2023年6月份正式发布。以下为原来信息:De......
  • 光脚丫学LINQ(012):LINQ查询操作中的类型关系
    视频演示:http://u.115.com/file/f2458259e9 若要有效编写查询,您应该了解完整的查询操作中的变量类型是如何全部彼此关联的。如果您了解这些关系,就能够更容易地理解文档中的LINQ示例和代码示例。另外,还能了解在使用var隐式对变量进行类型化时的后台操作。LINQ查询操作在数据源......
  • 3588 编译android12 过程中的报错。
     怀疑是当初解压的时候使用的是sudo.   ......
  • 1204. 最后一个能进入电梯的人
    1204.最后一个能进入电梯的人SQL架构表:Queue+-------------+---------+|ColumnName|Type|+-------------+---------+|person_id|int||person_name|varchar||weight|int||turn|int|+-------------+---------+p......
  • LCD12864单色屏任意位置显示文字图片功能,不在受限于8bit的分行
    /*取模软件image2Lcdv2.9液晶取模方式:扫描方式:数据水平,字节垂直输出灰度:单色最大宽度和高度:128*64字节内像素数据反序*/#defineLCD_REVERSE_FLAG0#defineLCD_DISPLAY_NORMAL0#defineLCD_DISPLAY_REVERSE1#defineLCD_BUFF_BYTE_MAX1024#defineSCREEN_WIDT......