题目描述

罗马数字包含以下七种字符: 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。
    给你一个整数,将其转为罗马数字。
    示例:
    输入: num = 3
    输出: “III”
    输入: num = 4
    输出: “IV”
    输入: num = 9
    输出: “IX”
    输入: num = 58
    输出: “LVIII”
    解释: L = 50, V = 5, III = 3.
    输入: num = 1994
    输出: “MCMXCIV”
    解释: M = 1000, CM = 900, XC = 90, IV = 4.

提示:

  • 1 <= num <= 3999

先上代码:

class Solution {public static String intToRoman(int num) {String s = String.valueOf(num);char[] chars = s.toCharArray();String result = "";int length = chars.length;for(int i = 0;i<chars.length;i++){result = result+returnRoman(chars[i],length - i);}return result;}public static String returnRoman(char singleChar,int index){String returnRoman = "";int i = Integer.parseInt(String.valueOf(singleChar));if(index == 4){while (i>0){returnRoman+="M";i--;}return returnRoman;} else if (index ==3){if(i == 9){returnRoman = "CM";}else if(i == 6){returnRoman = "DC";}else if (i == 4){returnRoman = "CD";}else if(i>0 && i<4){while (i>0){returnRoman+="C";i--;}}else if (i==5){returnRoman = "D";}else if(i>6 && i<9){returnRoman = "DC";while (i>6){returnRoman+="C";i--;}}else{returnRoman = "";}return returnRoman;}else if(index == 2){if(i == 9){returnRoman = "XC";}else if(i == 6){returnRoman = "LX";}else if (i == 4){returnRoman = "XL";}else if(i>0 && i<4){while (i>0){returnRoman+="X";i--;}}else if (i==5){returnRoman = "L";}else if(i>6 && i<9){returnRoman = "LX";while (i>6){returnRoman+="X";i--;}}else{returnRoman = "";}return returnRoman;}else {if(i == 9){returnRoman = "IX";}else if(i == 6){returnRoman = "VI";}else if (i == 4){returnRoman = "IV";}else if(i>0 && i<4){while (i>0){returnRoman+="I";i--;}}else if (i==5){returnRoman = "V";}else if(i>6 && i<9){returnRoman = "VI";while (i>6){returnRoman+="I";i--;}}else{returnRoman = "";}return returnRoman;}}
}

分析

本题读题感觉会很复杂,解决本题的关键是首先自己要能够手写出数字转罗马数字,只有自己脑中有一个转换的算法,才能将算法进行编写。
这里有一个罗马数字文档,可以根据它来找规律。
我的解法就是先将给的数字进行拆分,将数字拆分成每个字符,还有对应属于那个数位。幸亏本题num的范围限定了,不然可能会比较复杂一点。不难发现,每个数位上的4,5,6,9是比较特殊的,我们将这四个进行单独处理,其他的都是相同的规律。

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/integer-to-roman/

LeetCode(cai鸟之路)12 整数转罗马数字相关推荐

  1. Leetcode算法Java全解答--12. 整数转罗马数字

    Leetcode算法Java全解答–12. 整数转罗马数字 文章目录 Leetcode算法Java全解答--12. 整数转罗马数字 题目 想法 结果 总结 代码 我的答案 大佬们的答案 测试用例 其他 ...

  2. 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 ...

  3. 12. 整数转罗马数字 (Java解题 贪心思想)

    LeetCode - 12. 整数转罗马数字 题目描述 解题分析 code 总结 题目描述 罗马数字包含以下七种字符: I, V, X, L,C,D 和 M. 字符 数值 I 1 V 5 X 10 L ...

  4. LeetCode 11盛水最多的容器12整数转罗马数字

    目录 盛水最多的容器 题目描述 分析 整数转罗马数字 题目描述: 分析 结语 盛水最多的容器 公众号:bigsai,回复进群加入打卡,回复bigsai获取3GB的pdf资源.点赞再看,养成习惯! 题目 ...

  5. 12.整数转罗马数字-LeetCode

    1. 问题描述 这里直接采用的是leetcode上面的问题描述 罗马数字包含以下七种字符: I, V, X, L,C,D 和 M. 例如, 罗马数字 2 写做 II ,即为两个并列的 1.12 写做  ...

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

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

  7. LeetCode【11--盛水最多的容器】LeetCode【12 -- 整数转罗马数字】

    盛水最多的容器 题目描述 给定 n 个非负整数 a1,a2,-,an,每个数代表坐标中的一个点 (i, ai) .在坐标内画 n 条垂直线,垂直线 i 的两个端点分别为 (i, ai) 和 (i, 0 ...

  8. Leetcode 12. 整数转罗马数字 (每日一题 20210827)

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

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

最新文章

  1. 2019年汽车行业深度投资研究
  2. 分布式系统监视 开源解决方案 zabbix与nagios对比
  3. 解决办法在安装完Nginx后服务启动失败
  4. c++中调用Com组件的方法详解
  5. JAVA开发类似冒险岛的游戏Part1
  6. hdu_4742_Pinball Game 3D(cdq分治+树状数组)
  7. 使用迅捷PDF编辑器免费去除pdf水印
  8. Python实现Reed-Xiaoli(RX)高光谱目标检测算法
  9. 单片机里程计量设计c语言,基于单片机的出租车计价器的里程计算设计
  10. 维图PDMS切图软件
  11. springboot和springMVC
  12. CC26xx芯片烧录问题
  13. java去除html代码中含有的html、js、css标签,获取文字内容
  14. 如何利用无常损失从流动资金池中提取价值
  15. 最新详细版Ubuntu20.04安装教程
  16. 内网安全——穿透上线NgrokFrpNpsSpp
  17. HGE source explor 0x0
  18. python-使用pyautogui在桌面打开谷歌浏览器
  19. MT4、MT5 Manager
  20. 一份你女朋友都能读懂的 Git 教程,还不赶紧学起来!

热门文章

  1. Linux环境下C3P0 Failed to get local InetAddress for VMID 解决办法
  2. 【vue H5微信登录】
  3. js函数参数不匹配问题
  4. fgo网络错误Java_JAVA 线上故障排查全套路
  5. k8s 配置 ingress
  6. 深圳市金融社保卡 个人办理指南
  7. 101-STM32+Air724UG基本控制篇(自建物联网平台)-基础搭建-购买云主机,安装MQTT服务器软件(.Windows系统)
  8. 阿里巴巴 HTML 图标大全 使用详解
  9. html可折叠的树,JS实现一键展开或收起折叠树/视图树所有节点
  10. 变分自编码器VAE的数学原理