问题描述
给定一个整数(阿拉伯数字),要求将其转换罗马数字(字符串)。一般情况下,罗马数字是从左到右是按照从大到小的顺序进行分布的,除了少数几种特殊情况(IV、IX、XL、XC、CD、CM),这些数字的对应规则如下表所示,题目链接:**点我**
罗马数字 | 阿拉伯数字 |
---|---|
I | 1 |
V | 5 |
X | 10 |
L | 50 |
C | 100 |
D | 500 |
M | 1000 |
IV | 4 |
IX | 9 |
XL | 40 |
XC | 90 |
CD | 400 |
CM | 900 |
样例输入输出
输入:9
输出:IX
输入:27
输出:XXVII
解释:X = 10, V = 5, I = 1 。XXVII = 10 + 10 + 5 + 1 + 1 = 27
输入:1994
输出:MCMXCIV
解释: M = 1000, CM = 900, XC = 90, IV = 4。MCMXCIV = 1000 + 900 + 90 + 4 = 1994
问题解法
从题目中分析可以得知,对于一个阿拉伯数字,罗马数字会先选择最大的数字字符(M
)进行表示,不匹配后再选择第二大的数字字符进行匹配,依次类推,直到最后选择 I
为止。因此,题目的解法就按照这种规则进行模拟拼接每个匹配的字符串。
if 分支判断法
1 | class Solution |
数组优化法
上述解决虽然可以解决问题,但是有太多 if 分支,代码不够简洁,可以用数组进行优化,此方法参考:https://leetcode.com/problems/integer-to-roman/discuss/6310/My-java-solution-easy-to-understand,优化后的代码如下
1 | class Solution |