整数转罗马数字
题目
罗马数字包含字符对应的数值,如下:
字符 | 数值 |
---|---|
I | 1 |
V | 5 |
X | 10 |
L | 50 |
C | 100 |
D | 500 |
M | 1000 |
罗马数字还有一些特殊的规则:
I
可以放在V
(5) 和X
(10) 的左边,来表示 4 和 9。X
可以放在L
(50) 和C
(100) 的左边,来表示 40 和 90。C
可以放在D
(500) 和M
(1000) 的左边,来表示 400 和 900。
给定一个整数,将其转为罗马数字。输入确保在 1 到 3999 的范围内。
示例 1:
输入: 3
输出: "III"
示例 2:
输入: 4
输出: "IV"
示例 3:
输入: 9
输出: "IX"
示例 4:
输入: 58
输出: "LVIII"
解释: L = 50, V = 5, III = 3.
示例 5:
输入: 1994
输出: "MCMXCIV"
解释: M = 1000, CM = 900, XC = 90, IV = 4.
解题思路
- 定义整数与罗马数字的映射;
- 将传入的数字从最高位进行拆解。将映射的键从大到小排列,依次对键进行整除,得到对应的罗马数字个数,同时对应改变传入整数的值。
- 传入的值变为 0 时,遍历结束,返回
result
结果值。
代码实现
class Solution:
def intToRoman(self, num: int) -> str:
'''将整数转换为罗马数字
Args:
num: 整数
Returns:
返回整数对应的罗马数字
'''
map_int_roman = {
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'
}
result = ''
# 将传入的整数从最高位开始拆解
for key in sorted(map_int_roman.keys())[::-1]:
# 整除 key 得到的值,用来判断最高位,以及 key 值对应转换的罗马数字个数
tmp = num // key
if tmp == 0: # 表示 num < key,进行下一次比较
continue
# 在结果中添加对应的罗马数字个数
result += tmp * map_int_roman[key]
# 同时对应缩小数字
num -= tmp * key
# 如果 num 为 0,表示遍历结束
if num == 0:
break
return result
实现效果
以上就是本篇的主要内容
欢迎关注微信公众号《书所集录》
点击查看更多内容
1人点赞
评论
共同学习,写下你的评论
评论加载中...
作者其他优质文章
正在加载中
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦