当前位置: 首页 > news >正文

leetcode刷题日志-13整数转罗马数字

罗马数字包含以下七种字符: 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:

输入: num = 3
输出: “III”
示例 2:

输入: num = 4
输出: “IV”
示例 3:

输入: num = 9
输出: “IX”
示例 4:

输入: num = 58
输出: “LVIII”
解释: L = 50, V = 5, III = 3.
示例 5:

输入: num = 1994
输出: “MCMXCIV”
解释: M = 1000, CM = 900, XC = 90, IV = 4.罗马数字包含以下七种字符: 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:

输入: num = 3
输出: “III”
示例 2:

输入: num = 4
输出: “IV”
示例 3:

输入: num = 9
输出: “IX”
示例 4:

输入: num = 58
输出: “LVIII”
解释: L = 50, V = 5, III = 3.
示例 5:

输入: num = 1994
输出: “MCMXCIV”
解释: M = 1000, CM = 900, XC = 90, IV = 4.

思路:根据规则可知,我们可以从最大的罗马数字开始,让给定的整数依次除以罗马数字所代表的数,有几个则加入几个罗马符号,这里记得处理几种特殊情况

class Solution {public String intToRoman(int num) {String str = "";//记录结果Map<Integer,String> roman = new HashMap<Integer,String>();roman.put(1,"I");roman.put(5,"V");roman.put(4,"IV");roman.put(9,"IX");roman.put(10,"X");roman.put(50,"L");roman.put(40,"XL");roman.put(90,"XC");roman.put(100,"C");roman.put(400,"CD");roman.put(900,"CM");roman.put(500,"D");roman.put(1000,"M");//储存映射int[] nums = new int[]{1,4,5,9,10,40,50,90,100,400,500,900,1000};//从右往左依次除以该数组每个元素for(int i=12;i>=0;i--){int result = num / nums[i]; //判断num有几个nums[i],就有几个nums[i]所对应的罗马数字for(int j=0;j<result;j++)//加入结果{str = str + roman.get(nums[i]);num -= nums[i];//减去已经计算的}}return str;}
}
http://www.lryc.cn/news/232579.html

相关文章:

  • docker 部署mysql主从复制
  • C++打怪升级(十一)- STL之list
  • Python编程陷阱(七)
  • Python如何调用ixchariot进行吞吐量测试
  • 51单片机应用从零开始(五)·加减乘除运算
  • Meta降本增效大招之:弃用产品
  • Adobe Illustrator——原创设计的宝藏软件
  • LEEDCODE 220 存在重复元素3
  • 从内网到公网:使用Axure RP和内网穿透技术发布静态web页面的完整指南
  • 第三天课程 RabbitMQ
  • Ubuntu18.04编译OpenCV时遇到无法下载ADE的问题
  • 基于JavaWeb+SSM+社区居家养老服务平台—颐养者端微信小程序系统的设计和实现
  • 算法实战:亲自写红黑树之五 删除erase的平衡
  • 春秋云境靶场CVE-2021-41402漏洞复现(任意代码执行漏洞)
  • 12 Go的接口
  • Python编程-----并行处理应用程序
  • kubernetes集群编排——istio
  • mfc140u.dll丢失的解决方法,以及mfc140u.dll解决方法的优缺点
  • 2源码安装网络协议
  • 未来服务器操作系统的趋势与展望
  • VB.net WebBrowser网页元素抓取分析方法
  • 自建ES6.2.4切阿里云商业版ES(7.10)整体方案
  • Vue实现封装自定义指令
  • <MySQL> 查询数据进阶操作 -- 聚合查询
  • arm开发板
  • nodejs+vue教室管理系统的设计与实现-微信小程序-安卓-python-PHP-计算机毕业设计
  • rabbitMQ的Topic模式的生产者与消费者使用案例
  • 【软考篇】中级软件设计师 第五部分
  • 论文阅读——RetNet
  • 【Proteus仿真】【51单片机】锂电池管理系统