12. 整数转罗马数字

天天见闻 天天见闻 2022-03-15 教育 阅读: 341
摘要: 通常情况下,罗马数字中小的数字在大的数字的右边。给定一个整数,将其转为罗马数字。使用两个数组,一个是level数组:可以被代表的所有数值;另一个是romans数组:对应level中数值的罗马数字字符串。时间复杂度为O(1),输入的数字长度总是常数个,本题最多就是4次,空间复杂度为O(1)。

一、题目

罗马数字包含以下七种字符: 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。数字 1 在数字 5 的左边,所表示的数等于大数 5 减小数 1 得到的数值 4 。同样地,数字 9 表示为 IX。这个特殊的规则只适用于以下六种情况:

给定一个整数,将其转为罗马数字。输入确保在 1 到 3999 的范围内。

点击查看原题

二、思路

对于该转换规则,需要明白,先让尽可能大的进行表示,才表示剩余部分的数字内容罗马数字2,比如,2099先表示2000,再表示90,最后才是9。那么该题就很简单了,暴力的话,直接几种情况就几种if else,一路下来即可。

可是问题没有这么简单,如果后续有需要增添规则情况下,那就比较麻烦了,因为代码耦合度太高,不利于后期修改。

数组存储的方法

使用两个数组,一个是level数组:可以被代表的所有数值;另一个是romans数组:对应level中数值的罗马数字字符串。

然后通过遍历数组并添加在答案中即可,这种方案如果将数组改为读文件罗马数字2,可以在后期扩展更多规则,降低了耦合度。

三、代码 数组存储的方法

class Solution {
    public String intToRoman(int num) {
        int[] level = {1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1};
        String[] romans = {"M", "CM", "D", "CD", "C", "XC", "L", "XL", "X", "IX", "V", "IV", "I"};
        StringBuilder ans = new StringBuilder();
        for (int i = 0; i < level.length; i++) {
            int t = num/level[i];
            num %= level[i];
            while (t-- > 0) {
                ans.append(romans[i]);
            }
        }
        return ans.toString();
    }
}

时间复杂度为O(1),输入的数字长度总是常数个,本题最多就是4次,空间复杂度为O(1)。

其他相关

罗马数字

作者: 天天见闻 时间:2022-05-08 阅读: 299
船尾的罗马数字一艘英国快船表演起草英尺。数字范围从13到22,从下到上。罗马数字是一种起源于古罗马的数字系统,一直是整个欧洲乃至中世纪晚期的数字书写方式。该系统中的数字由拉丁字母的字母组合表示。罗马帝国衰败很久以后,罗马数字仍在继续使用。但是,此过程是渐进的,并且直到今天,在一些较小的应用中仍然使用罗马数字。可以经常在钟面上看到罗马数字。然而,在许多罗马数字钟面上,传统上用IIII表示4。...
罗马数字怎么写

罗马数字怎么写

作者: 天天见闻 时间:2022-04-28 阅读: 365
罗马数字从1到20是怎么写的?重复数次:一个罗马数字重复几次,就表示这个数的几倍。在一个较大的数字的左边记上一个较小的罗马数字,表示大数字减小数字。此外,左减数字不能超过一位,比如8写成VIII,而非IIX。同理,右加数字不能超过三位,比如十四写成XIV,而非XIIII。但是,由于IV是古罗马神话主神朱庇特(,古罗马字母没有J和U)的首字,因此有时用IIII代替IV。...

论文摘要目录页码需要用罗马数字,从绪论开始用阿拉伯数字

作者: 天天见闻 时间:2022-04-28 阅读: 915
4、在这几个节处分别进行操作后,将“封皮”上的页码删除,将摘要、目录上的页码用罗马数字编排,将绪论以后用阿拉伯数字写论文遇到麻烦了,要求摘要和目录用罗马数字单独编页码,正文用阿拉伯数字编页码,不会呀!论文格式调整,摘要到目录部分,页码是罗马数字,正文页码是阿拉伯,怎么弄?论文前三页页码用罗马数字,后面全部用阿拉伯数字,请问怎么设置?...
word怎么输入罗马数字

word怎么输入罗马数字

作者: 天天见闻 时间:2022-04-27 阅读: 519
word怎么输入罗马数字用途,尤其是在论文写作中,罗马数字常做为页码使用。那么在word文档中罗马数字怎么输入呢?word输入罗马数字的方法:【word怎么输入罗马数字】相关文章:word文档中输入罗马数字的方法10-04word中怎样输入大括号10-01如何在word箭头上输入字10-06word中特殊符号的输入方法09-24...
数字转罗马数字

数字转罗马数字

作者: 天天见闻 时间:2022-04-27 阅读: 274
新手上路!欢迎指点!题目:数值1510501005001000通常情况下,罗马数字中小的数字在大的数字的右边。这个特殊的规则只适用于以下六种情况:900。给定一个罗马数字,将其转换成整数。#f:3:1:d:8:d:7:f:d:7:f:2:d:5:c:6:3:b:e:e:e:6:c:0:f:c:a:1:8:3:d:d#算法思路:函数调用,字符拼接。...
2个解法:整数转为罗马数字

2个解法:整数转为罗马数字

作者: 天天见闻 时间:2022-03-25 阅读: 445
字符数值通常情况下,罗马数字中小的数字在大的数字的右边。给定一个整数,将其转为罗马数字。思路:贪心算法将小数置前的特例作为一个固定的值,跟默认的整数位一样,设置成数组,进行匹配,然后利用俗称的贪心思路,从大到小进行进行减法,最终得到结果,这是第一次的写法。思路:权值匹配类似十进制里面,使用空间换时间,对每个位置的值进行匹配求解,看起来比较麻烦,但确实思路清奇,似乎没技术含量,但解决问题高效。...
我来说两句

年度爆文