← Back to Leo Academy Masterclass

Problem #12: Integer to Roman

Medium Array & String

Intuition & Strategy Breakdown

Greedily subtract values starting from the largest Roman numeral symbols (M=1000, CM=900, D=500, CD=400, etc.) while building the result string.

Python Solution

class Solution:
    def intToRoman(self, num: int) -> str:
        syms = [["I", 1], ["IV", 4], ["V", 5], ["IX", 9], ["X", 10], ["XL", 40], ["L", 50],
                ["XC", 90], ["C", 100], ["CD", 400], ["D", 500], ["CM", 900], ["M", 1000]]
        res = ""
        for sym, val in reversed(syms):
            if num // val:
                count = num // val
                res += sym * count
                num %= val
        return res

Java Solution

class Solution {
    public String intToRoman(int num) {
        int[] values = {1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1};
        String[] symbols = {"M","CM","D","CD","C","XC","L","XL","X","IX","V","IV","I"};
        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < values.length; i++) {
            while (num >= values[i]) {
                num -= values[i];
                sb.append(symbols[i]);
            }
        }
        return sb.toString();
    }
}
Watch Interactive Video on Leo Academy Main App