leetcode每日不做题
461. 汉明距离
852. 山脉数组的峰顶索引
374. 猜数字大小
278. 第一个错误的版本
474. 一和零
231. 2 的幂
342. 4的幂
1074. 元素和为目标值的子矩阵数量
477. 汉明距离总和
12. 整数转罗马数字
1190. 反转每对括号间的子串
692. 前K个高频单词
1738. 找出第 K 大的异或坐标值
1442. 形成两个异或相等数组的三元组数目
993. 二叉树的堂兄弟节点
421. 数组中两个数的最大异或值
13.罗马数字转整数
本文档使用 MrDoc 发布
-
+
首页
12. 整数转罗马数字
[力扣原题链接](https://leetcode-cn.com/problems/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 ,即为两个并列的 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. ``` 提示: * ``` 1 <= num <= 3999 ``` ## 思路(无脑操作) 每个数字段对应一个或两个字符 **:** ``` 数字段 符号 >=1000 M >=900 CM >=500 D >=400 CD >=100 C >=90 XC >=50 L >=40 XL >=10 X >=9 IX >=5 V >=4 IV >0 I ``` 循环整数,每次满足一个数字段(从大到小依次判断),整数减去该是字段的最小值,用字符串拼接对应数字段的字符。当整数小于等于 0 时循环结束,得到的字符串就是对应的罗马数字。 ## 代码 语言:Java ``` public String intToRoman(int num) { StringBuffer sb = new StringBuffer(); while (num > 0) { if (num >= 1000) { sb.append("M"); num -= 1000; } else if (num >= 900) { sb.append("CM"); num -= 900; } else if (num >= 500) { sb.append("D"); num -= 500; } else if (num >= 400) { sb.append("CD"); num -= 400; } else if (num >= 100) { sb.append("C"); num -= 100; } else if (num >= 90) { sb.append("XC"); num -= 90; } else if (num >= 50) { sb.append("L"); num -= 50; } else if (num >= 40) { sb.append("XL"); num -= 40; } else if (num >= 10) { sb.append("X"); num -= 10; } else if (num >= 9) { sb.append("IX"); num -= 9; } else if (num >= 5) { sb.append("V"); num -= 5; } else if (num >= 4) { sb.append("IV"); num -= 4; } else { sb.append("I"); num--; } } return sb.toString(); } ``` ## 力扣官方代码 ```class Solution { int[] values = {1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1}; String[] symbols = {"M", "CM", "D", "CD", "C", "XC", "L", "XL", "X", "IX", "V", "IV", "I"}; public String intToRoman(int num) { StringBuffer roman = new StringBuffer(); for (int i = 0; i < values.length; ++i) { int value = values[i]; String symbol = symbols[i]; while (num >= value) { num -= value; roman.append(symbol); } if (num == 0) { break; } } return roman.toString(); } } ```
renyi567
2021年5月15日 09:12
转发文档
收藏文档
上一篇
下一篇
手机扫码
复制链接
手机扫一扫转发分享
复制链接
阅读量
次
本站总访问量
次
本站访客数
人次
Markdown文件
分享
链接
类型
密码
更新密码