LeetCode 12. Integer to Roman
问题描述
罗马数字用 7 个字符表示,I
, V
, X
, L
, C
, D
。它们与数字的对应关系如下:
比如,2
用 II
表示,即 1+1
。12
用 XII
表示,即 10+2
。27
用 XXVII
表示,即 2*10+5+2
。
通常,在罗马数字的书写中,数字从左到右,越来越小。但是,4
并不是用 IIII
表示,而是用 IV
,因为 5-1=4
。同样,对于 9
,用 IX
表示。有如下 6 种符号可在减法中使用:
I
可放在V
(5) 和X
(10) 的前面,表示 4 和 9。X
可放在L
(50) 和C
(100) 的前面,表示 40 和 90。C
可放在D
(500) 和M
(100) 的前面,表示 400 和 900。
现在给定一个整数,将它转换成罗马数字。假定输入数字的范围在 [1, 3999]
。
栗 1:
栗 2:
栗 3:
栗 4:
栗 5:
解题思路
题目挺简单的,因为罗马数字所能表示的值也就那么固定的几种,1, 4, 5, 9, 10, 40, 50, 90, 100, 400, 500, 900, 100
。
我们只需要将数字分解为它所能表示的值的组合,然后根据数字与罗马字符的映射关系,拼接结果。
如何将数字分解?从大到小遍历可表示的值,若遇到小于等于数字的值,则代表该值为数字组合的一部分,减去该值,继续遍历。
js
代码如下:
版权声明: 本文为 InfoQ 作者【liu_liu】的原创文章。
原文链接:【http://xie.infoq.cn/article/f28c8b85b9508127b1a8488bd】。文章转载请联系作者。
评论