leetcode12:整数转罗马数字

题目描述

(因为中文网的翻译太烂,还是自己写一版吧)
将整数转换为罗马数字。罗马数字包含七个不同的符号:I,V,X,L,C,D 和 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。数字 9 写做 IX,这个特殊的规则只适用于以下六种情况:

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

解题思路

创建映射表:首先,创建一个映射表来存储罗马数字符号和它们对应的整数值。

从大到小遍历:然后,从最大的罗马数字符号(M)开始,检查该符号在整数中能够出现的次数,并将其添加到结果字符串中。这样做的好处是,不需要担心后面的小数字影响前面已经放置的大数字。

处理特殊情况:对于 4、9、40、90、400 和 900 这些特殊情况,需要特别处理,因为它们不能通过简单的重复符号来表示。

迭代减少整数:每次放置一个罗马数字符号后,从整数中减去对应的值,然后迭代处理剩余的整数。

示例代码(JavaScript)

var intToRoman = function(num) {  
    const romanMap = [  
        { symbol: 'M', value: 1000 },  
        { symbol: 'CM', value: 900 },  
        { symbol: 'D', value: 500 },  
        { symbol: 'CD', value: 400 },  
        { symbol: 'C', value: 100 },  
        { symbol: 'XC', value: 90 },  
        { symbol: 'L', value: 50 },  
        { symbol: 'XL', value: 40 },  
        { symbol: 'X', value: 10 },  
        { symbol: 'IX', value: 9 },  
        { symbol: 'V', value: 5 },  
        { symbol: 'IV', value: 4 },  
        { symbol: 'I', value: 1 }  
    ];  
  
    let roman = '';  
  
    for (let i = 0; i < romanMap.length; i++) {  
        while (num >= romanMap[i].value) {  
            roman += romanMap[i].symbol;  
            num -= romanMap[i].value;  
        }  
    }  
  
    return roman;  
};  
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

1BN5100

都是总力战害了我

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值