# [Integer to Roman][title] ## Description 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, two is written as `II` in Roman numeral, just two one's added together. Twelve is written as, `XII`, which is simply `X` + `II`. The number twenty seven 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. Input is guaranteed to be within the range from 1 to 3999. **Example 1:** ``` Input: 3 Output: "III" ``` **Example 2:** ``` Input: 4 Output: "IV" ``` **Example 3:** ``` Input: 9 Output: "IX" ``` **Example 4:** ``` Input: 58 Output: "LVIII" Explanation: C = 100, L = 50, XXX = 30 and III = 3. ``` **Example 5:** ``` Input: 1994 Output: "MCMXCIV" Explanation: M = 1000, CM = 900, XC = 90 and IV = 4. ``` **Tags:** Math, String ## 思路 题意是整型数转罗马数字,范围从 1 到 3999,查看下百度百科的罗马数字介绍如下: * 相同的数字连写,所表示的数等于这些数字相加得到的数,如 Ⅲ=3; * 小的数字在大的数字的右边,所表示的数等于这些数字相加得到的数,如 Ⅷ=8、Ⅻ=12; * 小的数字(限于 Ⅰ、X 和 C)在大的数字的左边,所表示的数等于大数减小数得到的数,如 Ⅳ=4、Ⅸ=9。 那么我们可以把整数的每一位分离出来,让其每一位都用相应的罗马数字位表示,最终拼接完成。比如 `621` 我们可以分离百、十、个分别为 `6`、`2`、`1`,那么 `600` 对应的罗马数字是 `DC`,`20` 对应的罗马数字是 `XX`,`1` 对应的罗马数字是 `I`,所以最终答案便是 `DCXXI`。 ```java class Solution { public String intToRoman(int num) { String M[] = {"", "M", "MM", "MMM"}; String C[] = {"", "C", "CC", "CCC", "CD", "D", "DC", "DCC", "DCCC", "CM"}; String X[] = {"", "X", "XX", "XXX", "XL", "L", "LX", "LXX", "LXXX", "XC"}; String I[] = {"", "I", "II", "III", "IV", "V", "VI", "VII", "VIII", "IX"}; return M[num / 1000] + C[(num % 1000) / 100] + X[(num % 100) / 10] + I[num % 10]; } } ``` ## 结语 如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-java-leetcode][ajl] [title]: https://leetcode.com/problems/integer-to-roman [ajl]: https://github.com/Blankj/awesome-java-leetcode