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】。文章转载请联系作者。











评论