Leetcode算法Java全解答--12. 整数转罗马数字
Leetcode算法Java全解答–12. 整数转罗马数字
文章目录
- Leetcode算法Java全解答--12. 整数转罗马数字
- 题目
- 想法
- 结果
- 总结
- 代码
- 我的答案
- 大佬们的答案
- 测试用例
- 其他
题目
罗马数字包含以下七种字符: I, V, X, L,C,D 和 M。
字符 数值I 1V 5X 10L 50C 100D 500M 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 的范围内。
示例:
输入: 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.
想法
1.通过求商-求余获取数据
自己做一半就去找答案了
结果
总结
没有想到使用循环的方式
自己做一半就去找答案了
代码
我的答案
/** Copyright (C), 2015-2018* FileName: Solution012* Author: zhao* Date: 2018/11/8 19:35* Description: 12. 整数转罗马数字* History:* <author> <time> <version> <desc>* 作者姓名 修改时间 版本号 描述*/
package com.lizhaoblog.mid;import java.util.HashMap;
import java.util.Map;/*** 〈一句话功能简述〉<br>* 〈12. 整数转罗马数字〉** @author zhao* @date 2018/11/8 19:35* @since 1.0.1*/
public class Solution012 {/*************************************** 题目罗马数字包含以下七种字符: I, V, X, L,C,D 和 M。字符 数值I 1V 5X 10L 50C 100D 500M 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.**************************************//**************************************** 想法:* 1.通过求商-求余获取数据* 自己做一半就去找答案了*** 我的做法* 超过 %的测试案例** 代码执行过程:** 总结:* 没有想到使用循环的方式* 自己做一半就去找答案了* ***********************************/public String intToRoman(int num) {if (num < 1 || num > 3999) {return "";}String result = "";String[] romans = { "M", "CM", "D", "CD", "C", "XC", "L", "XL", "X", "IX", "V", "IV", "I" };int[] nums = { 1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1 };for (int i = 0; i < romans.length; i++) {int count = num / nums[i];num = num % nums[i];while (count > 0) {result += romans[i];count--;}}return result;}/*************************************** 比我好的答案 better* ***********************************/public String better(int num) {String M[] = { "", "M", "MM", "MMM" };String C[] = { "", "C", "CC", "CCC", "CD", "D", "DC", "DCC", "DCCC", "CM" };String X[] = { "", "X", "XX", "XXX", "XL", "L", "LX", "LXX", "LXXX", "XC" };String I[] = { "", "I", "II", "III", "IV", "V", "VI", "VII", "VIII", "IX" };return M[num / 1000] + C[(num % 1000) / 100] + X[(num % 100) / 10] + I[num % 10];}}
大佬们的答案
/*************************************** 比我好的答案 better* ***********************************/
public String better(int num) {String M[] = { "", "M", "MM", "MMM" };String C[] = { "", "C", "CC", "CCC", "CD", "D", "DC", "DCC", "DCCC", "CM" };String X[] = { "", "X", "XX", "XXX", "XL", "L", "LX", "LXX", "LXXX", "XC" };String I[] = { "", "I", "II", "III", "IV", "V", "VI", "VII", "VIII", "IX" };return M[num / 1000] + C[(num % 1000) / 100] + X[(num % 100) / 10] + I[num % 10];
}
测试用例
@Test
public void test012() {// 创建测试案例int s1 = 3;int s2 = 2345;// 测试案例期望值String expResult1 = "III";String expResult2 = "MMCCCXLV";// 执行方法Solution012 solution012 = new Solution012();String result1 = solution012.intToRoman(s1);String result2 = solution012.intToRoman(s2);// 判断期望值与实际值Assert.assertEquals(expResult1, result1);Assert.assertEquals(expResult2, result2);}
其他
代码托管码云地址:https://gitee.com/lizhaoandroid/LeetCodeAll.git
查看其他内容可以点击专栏或者我的博客哈:https://blog.csdn.net/cmqwan
“大佬们的答案” 标签来自leetcode,侵权请联系我进行删改
如有疑问请联系,联系方式:QQ3060507060
Leetcode算法Java全解答--12. 整数转罗马数字相关推荐
- Leetcode算法Java全解答--41. 缺失的第一个正数
Leetcode算法Java全解答–41. 缺失的第一个正数 文章目录 Leetcode算法Java全解答--41. 缺失的第一个正数 题目 想法 结果 总结 代码 我的答案 大佬们的答案 测试用例 ...
- Leetcode算法Java全解答--75. 颜色分类
Leetcode算法Java全解答–75. 颜色分类 文章目录 Leetcode算法Java全解答--75. 颜色分类 题目 想法 结果 总结 代码 我的答案 大佬们的答案 测试用例 其他 题目 给定 ...
- Leetcode算法Java全解答--16. 最接近的三数之和
Leetcode算法Java全解答–16. 最接近的三数之和 文章目录 Leetcode算法Java全解答--16. 最接近的三数之和 题目 想法 结果 总结 代码 我的答案 暴力破解 滑动列表 大佬 ...
- Leetcode算法Java全解答--37. 解数独
Leetcode算法Java全解答–37. 解数独 文章目录 Leetcode算法Java全解答--37. 解数独 题目 想法 结果 总结 代码 我的答案 大佬们的答案 测试用例 其他 题目 编写一个 ...
- Leetcode算法Java全解答--19. 删除链表的倒数第N个节点
Leetcode算法Java全解答–19. 删除链表的倒数第N个节点 文章目录 Leetcode算法Java全解答--19. 删除链表的倒数第N个节点 题目 想法 结果 总结 代码 我的答案 大佬们的 ...
- Leetcode算法Java全解答--60. 第k个排列
Leetcode算法Java全解答–60. 第k个排列 文章目录 Leetcode算法Java全解答--60. 第k个排列 题目 想法 结果 总结 代码 我的答案 大佬们的答案 测试用例 其他 题目 ...
- Leetcode算法Java全解答--73. 矩阵置零
Leetcode算法Java全解答–73. 矩阵置零 文章目录 Leetcode算法Java全解答--73. 矩阵置零 题目 想法 结果 总结 代码 我的答案 大佬们的答案 测试用例 其他 题目 给定 ...
- Leetcode算法Java全解答--17. 电话号码的字母组合
Leetcode算法Java全解答–17. 电话号码的字母组合 文章目录 Leetcode算法Java全解答--17. 电话号码的字母组合 题目 想法 结果 总结 代码 我的答案 大佬们的答案 测试用 ...
- LeetCode (12.整数转罗马数字)JAVA StringBuffer
LeetCode (12.整数转罗马数字)JAVA StringBuffer 罗马数字包含以下七种字符: I, V, X, L,C,D 和 M. 字符 数值 I 1 V 5 X 10 L 50 C 1 ...
最新文章
- C#事件-使用事件需要的步骤
- java5引入包装类型的意义_Java中的基本类型和包装类
- ASP.NET页面的生命周期
- Lua的继承(利用setmetatable)
- 【Python CheckiO 题解】Popular Words
- STM32 - 定时器高级应用说明 - 多触波的实现 (N-pulse waveform generation using timer synchronization)- 01
- (一)phoneGap之环境搭建教程及其example分析
- Gtk:利用alignment控制button大小
- python hashlib_python hashlib模块
- 使用lua实现redis分布式锁
- html调用xfplugin,傻瓜式网页里嵌入先锋web万能播放控件
- C#毕业设计——基于C#+asp.net+cs的即时通信系统设计与实现(毕业论文+程序源码)——即时通信系统
- 色彩设计原理(里面有配色方案,也有配色网站)
- Mac更换JDK版本
- py thon画一个实心五角星
- AcWing 1123 铲雪车
- html分享到微博,h5页面分享到微信、朋友圈、新浪微博、QQ空间、QQ好友组件
- 软件测试岗位具体是做什么的?
- rp_rv1126开发板UVC XU扩展协议功能验证
- Chip-seq数据寻找Indel
热门文章
- H5创建webApp保存到桌面。
- 古文观止卷七_歸去來辭_陶淵明
- 让股神“巴菲浆”告诉你接下来的股票市场走势,带好钞票准备起飞!
- NUC-ACM/ICPC 寒假训练 简单DP A - G题
- windows U盘脱机状态处理方式
- “让专业的人做专业的事”,畅捷通的云原生故事
- 那些年,我们一起追过的Code......
- Java学习基础:搞懂IO
- IIS+php环境下:上传文件出现:windows server PHP Warning: mkdir(): Permission denied 解决办法
- CentOS 7 搭建 Keepalived+LVS NAT模式 高可用集群