Medium
Seven different symbols represent Roman numerals with the following values:
| Symbol | Value |
|---|---|
| I | 1 |
| V | 5 |
| X | 10 |
| L | 50 |
| C | 100 |
| D | 500 |
| M | 1000 |
Roman numerals are formed by appending the conversions of decimal place values from highest to lowest. Converting a decimal place value into a Roman numeral has the following rules:
I) less than 5 (V): IV and 9 is 1 (I) less than 10 (X): IX. Only the following subtractive forms are used: 4 (IV), 9 (IX), 40 (XL), 90 (XC), 400 (CD) and 900 (CM).I, X, C, M) can be appended consecutively at most 3 times to represent multiples of 10. You cannot append 5 (V), 50 (L), or 500 (D) multiple times. If you need to append a symbol 4 times use the subtractive form.Given an integer, convert it to a Roman numeral.
Example 1:
Input: num = 3749
Output: “MMMDCCXLIX”
Explanation:
3000 = MMM as 1000 (M) + 1000 (M) + 1000 (M) 700 = DCC as 500 (D) + 100 (C) + 100 (C) 40 = XL as 10 (X) less of 50 (L) 9 = IX as 1 (I) less of 10 (X) Note: 49 is not 1 (I) less of 50 (L) because the conversion is based on decimal places
Example 2:
Input: num = 58
Output: “LVIII”
Explanation:
50 = L 8 = VIII
Example 3:
Input: num = 1994
Output: “MCMXCIV”
Explanation:
1000 = M 900 = CM 90 = XC 4 = IV
Constraints:
1 <= num <= 3999public class Solution {
public String intToRoman(int num) {
StringBuilder sb = new StringBuilder();
int m = 1000;
int c = 100;
int x = 10;
int i = 1;
num = numerals(sb, num, m, ' ', ' ', 'M');
num = numerals(sb, num, c, 'M', 'D', 'C');
num = numerals(sb, num, x, 'C', 'L', 'X');
numerals(sb, num, i, 'X', 'V', 'I');
return sb.toString();
}
private int numerals(StringBuilder sb, int num, int one, char cTen, char cFive, char cOne) {
int div = num / one;
switch (div) {
case 9:
sb.append(cOne);
sb.append(cTen);
break;
case 8:
sb.append(cFive);
sb.append(cOne);
sb.append(cOne);
sb.append(cOne);
break;
case 7:
sb.append(cFive);
sb.append(cOne);
sb.append(cOne);
break;
case 6:
sb.append(cFive);
sb.append(cOne);
break;
case 5:
sb.append(cFive);
break;
case 4:
sb.append(cOne);
sb.append(cFive);
break;
case 3:
sb.append(cOne);
sb.append(cOne);
sb.append(cOne);
break;
case 2:
sb.append(cOne);
sb.append(cOne);
break;
case 1:
sb.append(cOne);
break;
default:
break;
}
return num - (div * one);
}
}