---
# System prepended metadata

title: 12. Integer to Roman
tags: [leetcode]

---

###### tags: `leetcode`

# 12. Integer to Roman
## my code
```python=
class Solution:
    def intToRoman(self, num: int) -> str:
        s = '' # not []
        r1dict = {1:'I',10:'X',100:'C',1000:'M',10000:'only-to-prevent-KeyError'}
        r5dict = {1:'V',10:'L',100:'D',1000:'only-for-consistency'}
        for d in [1000,100,10,1]: # d is for decimal base
            r1 = r1dict[d]  # roman digit for 1*d
            r5 = r5dict[d]  # roman digit for 5*d
            r10 = r1dict[d*10]
            myDict = {0:'',1:r1, 2:r1*2,3:r1*3, 4:r1+r5, 5:r5,6:r5+r1, 7:r5+r1*2, 8:r5+r1*3, 9:r1+r10}
            x = num//d
            num = num - x * d
            s += myDict[x]  # not s.append(myDict[x])
        return s
```
## another person’s
```java=
public static 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];
}
```
## another person’s
```java=
public class Solution {
    public String intToRoman(int number) {
        int[] values = {1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1 };
        String[] numerals = {"M", "CM", "D", "CD", "C", "XC", "L", "XL", "X", "IX", "V", "IV", "I" };
        StringBuilder result = new StringBuilder();
        for (int i = 0; i < values.length; i++) {
            while (number >= values[i]) {
                number -= values[i];
                result.append(numerals[i]);
            }
        }
        return result.toString();
    }
}
```
## another person’s, **zip()**
```python=
class Solution(object):
    def intToRoman(self, num):
        dict = ["M","CM","D","CD","C","XC","L","XL","X","IX","V","IV","I"]
        nums = [1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1]
        result = ""
        for letter, n in zip(dict, nums):
            result += letter * int(num / n)
            num %= n
        return result
```
## another person’s
```python=
def intToRoman1(self, num):
    values = [ 1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1 ]
    numerals = [ "M", "CM", "D", "CD", "C", "XC", "L", "XL", "X", "IX", "V", "IV", "I" ]
    res, i = "", 0
    while num:
        res += (num//values[i]) * numerals[i]
        num %= values[i]
        i += 1
    return res
```
## another person’s, **enumerate()?????**
https://leetcode.com/problems/integer-to-roman/discuss/6304/Python-simple-solution.
```python=
def intToRoman(self, num):
    values = [ 1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1 ]
    numerals = [ "M", "CM", "D", "CD", "C", "XC", "L", "XL", "X", "IX", "V", "IV", "I" ]
    res = ""
    for i, v in enumerate(values):
        res += (num//v) * numerals[i]
        num %= v
    return res
```
## another person’s, **zip()?????**
https://leetcode.com/problems/integer-to-roman/discuss/6361/A-simple-python-code-easy-to-understand
```python=
class Solution(object):
    def intToRoman(self, num):
        dict = ["M","CM","D","CD","C","XC","L","XL","X","IX","V","IV","I"]
        nums = [1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1]
        result = ""
        for letter, n in zip(dict, nums):
            result += letter * int(num / n)
            num %= n
        return result
```