回顾前言中列出的这 13 个符号,可以发现:

千位数字只能由M 表示;
百位数字只能由C,CD,D 和CM 表示;
十位数字只能由X,XL,L 和XC 表示;
个位数字只能由I,IV,V 和IX 表示。
这恰好把这13 个符号分为四组,且组与组之间没有公共的符号。因此,整数num 的十进制表示中的每一个数字都是可以单独处理的。

进一步地,我们可以计算出每个数字在每个位上的表示形式,整理成一张硬编码表。如下图所示,其中 0 对应的是空字符串。

利用模运算和除法运算,我们可以得到num 每个位上的数字:

thousands_digit = num / 1000
hundreds_digit = (num % 1000) / 100
tens_digit = (num % 100) / 10
ones_digit = num % 10

最后,根据num 每个位上的数字,在硬编码表中查找对应的罗马字符,并将结果拼接在一起,即为num 对应的罗马数字。

var intToRoman = function(num) {const thousands = ["", "M", "MM", "MMM"];const hundreds = ["", "C", "CC", "CCC", "CD", "D", "DC", "DCC", "DCCC", "CM"];const tens     = ["", "X", "XX", "XXX", "XL", "L", "LX", "LXX", "LXXX", "XC"];const ones     = ["", "I", "II", "III", "IV", "V", "VI", "VII", "VIII", "IX"];const roman = [];roman.push(thousands[Math.floor(num / 1000)]);roman.push(hundreds[Math.floor(num % 1000 / 100)]);roman.push(tens[Math.floor(num % 100 / 10)]);roman.push(ones[num % 10]);return roman.join('');
};

JS算法-整数转罗马数字相关推荐

  1. Java算法——整数转罗马数字(LeetCode第12题)

    题目描述 给定一个整数,将其转换成罗马数字.例如, 罗马数字 2 写做II,即为两个并列的 1 .12 写做XII,即为X+II. 27写做XXVII, 即为XX+V+II. 通常情况下,罗马数字中小 ...

  2. 【算法百题之四十】整数转罗马数字

    [算法百题之四十]整数转罗马数字    大家好,我是Lampard~~    很高兴又能和大家见面了,接下来准备系列更新的是算法题,一日一练,早日升仙!    今天的问题是:整数转罗马数字(贪心算法) ...

  3. 【算法练习】罗马数字转整数与整数转罗马数字

    Leetcode 题目(难度:简单) 13. 罗马数字转整数 罗马数字包含以下七种字符: I, V, X, L,C,D 和 M. 字符 数值 I 1 V 5 X 10 L 50 C 100 D 500 ...

  4. Leetcode算法Java全解答--12. 整数转罗马数字

    Leetcode算法Java全解答–12. 整数转罗马数字 文章目录 Leetcode算法Java全解答--12. 整数转罗马数字 题目 想法 结果 总结 代码 我的答案 大佬们的答案 测试用例 其他 ...

  5. 算法:整数转罗马数字(integer-to-roman)。

    罗马数字包含以下七种字符: I, V, X, L,C,D 和 M. 字符 数值 I 1 V 5 X 10 L 50 C 100 D 500 M 1000 例如, 罗马数字 2 写做 II ,即为两个并 ...

  6. JS 实现数字转罗马数字

    JS 实现数字转罗马数字 JS 实现数字转罗马数字,最近楼主在写w3c的算法挑战,现在到这个转换实现这里了,所以想着写个博客,看看自己的实现方法和大家的有什么出入的,还望大家多多指教,附上源代码 fu ...

  7. 整数转罗马数字(C++)

    整数转罗马数字 描述 罗马数字包含以下七种字符: I, V, X, L,C,D 和 M. 字符 数值 I 1 V 5 X 10 L 50 C 100 D 500 M 1000 例如, 罗马数字 2 写 ...

  8. Leetcode No.12 整数转罗马数字

    题目描述 罗马数字包含以下七种字符: I, V, X, L,C,D 和 M. 字符          数值 I             1 V             5 X             ...

  9. JS算法探险之队列(Queue)

    ❝ 乔布斯经常说到一句话:"Stay hungry, Stay foolish" 「Stay hungry」:永不满足, 「Stay foolish」: 是说埋头做自己的事,不要理 ...

最新文章

  1. 基于Matlab的神经网络结合遗传算法在非线性函数极值寻优中的应用
  2. TSC打印机DLL说明
  3. spring bean属性scope
  4. leetcode: Roman to Integer
  5. JS-图片其他事件-Event对象-事件委托-DOM对象
  6. 千万要避免的五种程序注释方式
  7. 磁盘分区怎么恢复回去?易我分区大师恢复丢失分区
  8. 交换机和路由器技术-28-OSPF的NSSA区域
  9. 2021-11-13 信道划分介质访问控制ALOHA协议CSMA协议
  10. 我有一个梦想(I have a dream)
  11. SQL工具导出CSV文件中文乱码
  12. zip压缩包太大无法用unzip成功解压(保姆级)
  13. 今天Sapphire来短消息问我“一件有点隐私”的事情,:)
  14. oracle 取记录最大的那条记录_相机记录高三备考生的一天,看哭万人: 读书虽苦,却是最容易的那条路!...
  15. Java实现信用卡校验
  16. 自制嵌入式操作系统 DAY1
  17. 笑出腹肌,程序员从不撒谎,但注释却会
  18. 每天一个IDA小技巧(二):基本代码转换
  19. 远程桌面方式控制设备方案
  20. Oracle 数据库巡检模板

热门文章

  1. docker配置加速器,快速拉取镜像
  2. 支付与对账业务的流程
  3. Java之4种引用简析
  4. Qt开发串口通信以及坐标显示程序并移植
  5. 牵手·············
  6. 荒野行动一直在获取服务器信息,荒野行动取得服务器信息一直不动 服务器信息0处理办法...
  7. 聚类分析(cluster analysis)
  8. Reso | 什么是 XML?
  9. 感性负载对电源的影响有多大?
  10. html5实习体会,html5实习心得体会.doc