Roman numerals are represented by seven different symbols: I
, V
, X
, L
, C
, D
and M
.
Symbol Value
I 1
V 5
X 10
L 50
C 100
D 500
M 1000
For example, 2
is written as II
in Roman numeral, just two one's added together. 12
is written as XII
, which is simply X + II
. The number 27
is written as XXVII
, which is XX + V + II
.
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 before V
(5) and X
(10) to make 4 and 9. X
can be placed before L
(50) and C
(100) to make 40 and 90. C
can be placed before D
(500) and M
(1000) to make 400 and 900.Given an integer, convert it to a roman numeral.
Example 1:
Input: num = 3
Output: "III"
Explanation: 3 is represented as 3 ones.
Example 2:
Input: num = 58
Output: "LVIII"
Explanation: L = 50, V = 5, III = 3.
Example 3:
Input: num = 1994
Output: "MCMXCIV"
Explanation: M = 1000, CM = 900, XC = 90 and IV = 4.
Constraints:
1 <= num <= 3999
class Solution { private static final int[] values = {1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1}; private static final String[] symbols = {"M","CM","D","CD","C","XC","L","XL","X","IX","V","IV","I"}; public String intToRoman(int num) { StringBuilder sb = new StringBuilder(); // Loop through each symbol, stopping if num becomes 0. for (int i = 0; i < values.length && num > 0; i++) { // Repeat while the current symbol still fits into num. while (values[i] <= num) { num -= values[i]; sb.append(symbols[i]); } } return sb.toString(); } }
class Solution { public String intToRoman(int num) { Map<Integer, String> map = new HashMap<>(); map.put(1, "I"); map.put(4, "IV"); map.put(5, "V"); map.put(9, "IX"); map.put(10, "X"); map.put(40, "XL"); map.put(50, "L"); map.put(90, "XC"); map.put(100, "C"); map.put(400, "CD"); map.put(500, "D"); map.put(900, "CM"); map.put(1000, "M"); StringBuilder sb = new StringBuilder(); while (num > 0) { if (num >= 1000) { num -= 1000; sb.append(map.get(1000)); } else if (num >= 900) { num -= 900; sb.append(map.get(900)); } else if (num >= 500) { num -= 500; sb.append(map.get(500)); } else if (num >= 400) { num -= 400; sb.append(map.get(400)); } else if (num >= 100) { num -= 100; sb.append(map.get(100)); } else if (num >= 90) { num -= 90; sb.append(map.get(90)); } else if (num >= 50) { num -= 50; sb.append(map.get(50)); } else if (num >= 40) { num -= 40; sb.append(map.get(40)); } else if (num >= 10) { num -= 10; sb.append(map.get(10)); } else if (num >= 9) { num -= 9; sb.append(map.get(9)); } else if (num >= 5) { num -= 5; sb.append(map.get(5)); } else if (num >= 4) { num -= 4; sb.append(map.get(4)); } else if (num >= 1) { num -= 1; sb.append(map.get(1)); } } return sb.toString(); } }