题目描述

罗马数字包含以下七种字符: 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。这个特殊的规则只适用于以下六种情况:

I 可以放在 V (5) 和 X (10) 的左边,来表示 4 和 9。

X 可以放在 L (50) 和 C (100) 的左边,来表示 40 和 90。

C 可以放在 D (500) 和 M (1000) 的左边,来表示 400 和 900。

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

示例 1

输入: 3

输出: "III"

示例 2

输入: 4

输出: "IV"

示例 3

输入: 9

输出: "IX"

示例 4

输入: 58

输出: "LVIII"

解释: L = 50, V = 5, III = 3.

示例 5

输入: 1994

输出: "MCMXCIV"

解释: M = 1000, CM = 900, XC = 90, IV = 4.

题解

public String intToRoman(int num) {

Map lookup = new LinkedHashMap<>();

lookup.put(1000, "M");

lookup.put(900, "CM");

lookup.put(500, "D");

lookup.put(400, "CD");

lookup.put(100, "C");

lookup.put(90, "XC");

lookup.put(50, "L");

lookup.put(40, "XL");

lookup.put(10, "X");

lookup.put(9, "IX");

lookup.put(5, "V");

lookup.put(4, "IV");

lookup.put(1, "I");

StringBuilder res = new StringBuilder();

for (Integer key : lookup.keySet()) {

int n = num / key;

if (n == 0) continue;

for (int i = n; i > 0; i--) {

res.append(lookup.get(key));

}

num -= n * key;

if (num == 0) {

break;

}

}

return res.toString();

}

复杂度分析

时间复杂度:$O(n)$,虽然是两个循环,但是第二个循环次数最大为3。

空间复杂度:$O(n)$。

手记

LinkedHashMap 可以按插入顺序存放键值对。

PHP算法之整数转罗马数字

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

Java算法练习——整数反转

题目链接 题目描述 给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转. 备注 注意: 假设我们的环境只能存储得下 32 位的有符号整数,则其数值范围为 $[−2^{31}, 2^ ...

Java实现 LeetCode 12 整数转罗马数字

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

lintcode :Integer to Roman 整数转罗马数字

题目 整数转罗马数字 给定一个整数,将其转换成罗马数字. 返回的结果要求在1-3999的范围内. 样例 4 -> IV 12 -> XII 21 -> XXI 99 -> XC ...

java算法 蓝桥杯 高精度加法

问题描述 在C/C++语言中,整型所能表示的范围一般为-231到231(大约21亿),即使long long型,一般也只能表示到-263到263.要想计算更加规模的数,就要用软件来扩展了,比如用数组或 ...

java算法 蓝桥杯 文化之旅

问题描述 有一位使者要游历各国,他每到一个国家,都能学到一种文化,但他不愿意学习任何一种文化超过一次(即如果他学习了某种文化,则他就不能到达其他有这种文化的国家).不同的国家可能有相同的文化.不同文化 ...

java算法 蓝桥杯 摆花

问题描述 小明的花店新开张,为了吸引顾客,他想在花店的门口摆上一排花,共m盆.通过调查顾客的喜好,小明列出了顾客最喜欢的n种花,从1到n标号.为了在门口展出更多种花,规定第i种花不能超过ai盆,摆花时 ...

LeetCode:整数转罗马数字【12】

LeetCode:整数转罗马数字[12] 题目描述 罗马数字包含以下七种字符: I, V, X, L,C,D 和 M. 字符 数值 I 1 V 5 X 10 L 50 C 100 D 500 M 10 ...

&lbrack;LeetCode&rsqb; 12&period; Integer to Roman 整数转为罗马数字

Roman numerals are represented by seven different symbols: I, V, X, L, C, D and M. Symbol Value I 1 ...

随机推荐

POJ1753 Flip Game(bfs、枚举)

链接:http://poj.org/problem?id=1753 Flip Game Description Flip game is played on a rectangular 4x4 fie ...

JAVA Day8

1. 引用数据类型需要new 2. 字符串使用的3种方式 String s = "hello world"; String s = new String(); String s = ...

U3D事件系统总结

事件系统有三个要素:发送者,接收者, 转发者. 发送者有两种,一是相机,二是画布.发送者是事件的管理者,发起者,它们使用射线发射器来检测点击事件: 相机的physics Raycaster. 画面的C ...

for in 在数组和json中

数组中也有for--in,相较于对象中的用法是有区别的:数组中 var arr = ['曹操','曹植','曹丕'] for(i in arr){ console.log(i) //0 1 2 con ...

&lbrack;LOJ3086&rsqb;&lbrack;GXOI&sol;GZOI2019&rsqb;逼死强迫症——递推&plus;矩阵乘法

题目链接: [GXOI/GZOI2019]逼死强迫症 设$f[i][j]$表示前$i$列有$j$个$1*1$的格子的方案数,那么可以列出递推式子: $f[i][0]=f[i-1][0]+f[i-2][ ...

python3 urllib模块使用

urllib模块使用 urllib.request urllib.request.urlopen(url, data=None, [timeout, ]*, cafile=None, capath=N ...

ASP&period;NET MVC:无法向会话状态服务器发出会话状态请求

ylbtech-Error-ASP.NET MVC: 无法向会话状态服务器发出会话状态请求 无法向会话状态服务器发出会话状态请求.请确保 ASP.NET State Service (ASP.NET ...

js 每隔四位加一个空格

var str = '2016060520103600466'; var str=str.replace(/\s/g,'').replace(/(.{4})/g,"$1 "); a ...

&lbrack;Erlang24&rsqb;使用zotonic搭建网站记录

zotonic的搭建网站(blog)记录:   zotonic:用Erlang做的一个web 框架:   和wordpress 类似,但是官网称比PHP CMS要快10倍以上   先看看我的成果:正弦 ...

php-fpm 操作命令

以下内容转自 https://www.cnblogs.com/alibai/p/4070076.html 和 https://blog.csdn.net/wzx19840423/article/det ...

罗马数字 java_Java算法练习——整数转罗马数字相关推荐

  1. 算法:整数转罗马数字(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 ,即为两个并 ...

  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. Java算法——整数转罗马数字(LeetCode第12题)

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

  6. LeetCode第12题 整数转罗马数字

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

  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. python编程比赛初赛 组成最小罗马数字_leetcode 题解 12python3@ 通过使用罗马数字的最单元位来构造数组 + 构造数字算法...

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

  9. LeetCode题目笔记--12.整数转罗马数字

    题目描述   题目跟前面13题描述一样,就是问题变为整数转成罗马数字. 思路   上一道题罗马数字转整数比较简单,因为不存在罗马数字表示冲突的问题,即不存在一个罗马数字对应多个整数.而这个问题中,就要 ...

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

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

最新文章

  1. java环境变量javac不能成功 win7_Java开发:Java环境搭建
  2. ie下的placeholder原生js实现方法
  3. pythontuple数据类型_Python基础教程2d–数据类型-tuple(元组)
  4. 厦门理工学院计算机科学与技术专业,厦门理工学院计算机类(含计算机科学与技术、网络工程、空间信息与专业2016年在福建理科高考录取最低分数线...
  5. 交互设计新人的核心竞争力
  6. 复习笔记(九)——C++中的容器(STL容器)
  7. 性能优化指南(5000 字小结)
  8. [html] 页面需要支持多语言,如果是你该怎么做?
  9. 3D Game Programming with directx 11 习题答案 8.3
  10. ARM汇编杂项伪指令
  11. java8 自动关闭资源_java9系列第二篇-资源自动关闭的语法增强
  12. android用IO实现日记的读写,android开发实现文件读写
  13. ios UISearchController
  14. 阿里月饼事件,猿方怎么看?
  15. “天鹅”类谜解大全!-
  16. 思科路由器和交换机的硬件结构
  17. 数据可视化:在 React 项目中使用 Vega 图表 (一)
  18. 广西人才网实习信息爬取与数据库存储实战
  19. yershop商城系统开发(二)——新浪SAE配置
  20. envi classic中怎么进行掩膜处理?为什么是非黑即白?

热门文章

  1. c语言程序输出三角,C语言小程序之输出“上三角”
  2. python 四舍五入到整数_python “四舍五入”
  3. 感应电机的矢量控制策略【Ⅰ】
  4. (KNN)K-近邻算法介绍和 Facebook签到位置预测案例应用
  5. 面试明明聊的很开心,为什么要挂我!
  6. 最高效的XML解析方式-----Simple 简化 XML 解析
  7. VMware虚拟机安装操作系统方法
  8. android开发 多语言和国际化
  9. c语言中isupper用法,C 库函数 isupper() 使用方法及示例
  10. redis问题及答案