Roman numerals are usually written largest to smallest from left to right. However, the numeral for four is not IIII
. Instead, the number four is written as IV
. Because the one is before the five we subtract it making four. The same principle applies to the number nine, which is written as IX
. There are six instances where subtraction is used:
-
I
can be placed beforeV
(5) andX
(10) to make 4 and 9. -
X
can be placed beforeL
(50) andC
(100) to make 40 and 90. -
C
can be placed beforeD
(500) andM
(1000) to make 400 and 900.
Given an integer, convert it to a roman numeral.
Example 1:
Input: num = 3
Output: “III”
Example 2:
Input: num = 4
Output: “IV”
Example 3:
Input: num = 9
Output: “IX”
Example 4:
Input: num = 58
Output: “LVIII”
Explanation: L = 50, V = 5, III = 《一线大厂Java面试题解析+后端开发学习笔记+最新架构讲解视频+实战项目源码讲义》无偿开源 威信搜索公众号【编程进阶路】 3.
Example 5:
Input: num = 1994
Output: “MCMXCIV”
Explanation: M = 1000, CM = 900, XC = 90 and IV = 4.
Constraints:
- 1 <= num <= 3999
[](()Analysis
略
[](()Submission
public class IntegerToRoman {
// 方法一:我写的
public String intToRoman1(int num) {
if (num < 1 || num > 3999)
throw new IllegalArgumentException(String.valueOf(num));
StringBuilder sb = new StringBuilder();
int digit = 0;
while (num > 0) {
int n1 = num % 10;
if (n1 != 0) {
int n2 = n1 * (int) Math.pow(10, digit);
sb.insert(0, map(n2));
}
digit++;
num /= 10;
}
return sb.toString();
}
private String map(int num) {
if (0 < num && num <= 3)
return repeat(“I”, num);
if (num == 4)
return “IV”;
if (5 <= num && num <= 8)
return “V” + repeat(“I”, num - 5);
if (num == 9)
return “IX”;
if (10 <= num && num <= 30)
return repeat(“X”, num / 10);
if (num == 40)
return “XL”;
if (50 <= num && num <= 80)
return “L” + repeat(“X”, num / 10 - 5);
if (num == 90)
return “XC”;
if (100 <= num && num <= 300)
return repeat(“C”, num / 100);
if (num == 400)
return “CD”;
if (500 <= num && num <= 800)
return “D” + repeat(“C”, num / 100 - 5);
if (num == 900)
return “CM”;
if (1000 <= num && num <= 3000)
return repeat(“M”, num / 1000);
return “”;
}
private String repeat(String str, int num) {
if (num < 1)
return “”;
StringBuilder sb = new StringBuilder();
for (int i = 0; i < num; i++) {
sb.append(str);
}
return sb.toString();
}
// 方法二:挺巧妙的
public String intToRoman2(int num) {
int[] values = { 1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1 };
String[] strs = { “M”, “CM”, “D”, “CD”, “C”, “XC”, “L”, “XL”, “X”, “IX”, “V”, “IV”, “I” };