DEV Community

Cover image for LeetCode Challenge: 12. Integer to Roman - JavaScript Solution πŸš€
Rahul Kumar Barnwal
Rahul Kumar Barnwal

Posted on

1 1 1 1 1

LeetCode Challenge: 12. Integer to Roman - JavaScript Solution πŸš€

Top Interview 150

Converting integers to Roman numerals is a fun problem involving string manipulation and careful application of Roman numeral rules. Let’s explore LeetCode 12: Integer to Roman, break down the steps, and implement the solution in JavaScript.


πŸš€ Problem Description

You are given an integer num (1 ≀ num ≀ 3999).
Return its Roman numeral representation.

Roman numerals follow specific rules:

  • Symbols: I (1), V (5), X (10), L (50), C (100), D (500), M (1000).
  • Use subtractive notation for 4, 9, 40, 90, 400, 900.

πŸ’‘ Examples

Example 1

Input: num = 3749  
Output: "MMMDCCXLIX"  
Explanation:  
- 3000 β†’ `MMM`  
- 700 β†’ `DCC`  
- 40 β†’ `XL`  
- 9 β†’ `IX`
Enter fullscreen mode Exit fullscreen mode

Example 2

Input: num = 58  
Output: "LVIII"  
Explanation:  
- 50 β†’ `L`  
- 8 β†’ `VIII`
Enter fullscreen mode Exit fullscreen mode

Example 3

Input: num = 1994  
Output: "MCMXCIV"  
Explanation:  
- 1000 β†’ `M`  
- 900 β†’ `CM`  
- 90 β†’ `XC`  
- 4 β†’ `IV`
Enter fullscreen mode Exit fullscreen mode

πŸ† JavaScript Solution

To solve this problem, we’ll use a greedy approach:

  • Start with the largest Roman numeral.
  • Subtract its value from the number while appending the numeral to the result.
  • Repeat until the number becomes zero.

Implementation

var intToRoman = function(num) {
    const romanMap = [
        { value: 1000, symbol: 'M' },
        { value: 900, symbol: 'CM' },
        { value: 500, symbol: 'D' },
        { value: 400, symbol: 'CD' },
        { value: 100, symbol: 'C' },
        { value: 90, symbol: 'XC' },
        { value: 50, symbol: 'L' },
        { value: 40, symbol: 'XL' },
        { value: 10, symbol: 'X' },
        { value: 9, symbol: 'IX' },
        { value: 5, symbol: 'V' },
        { value: 4, symbol: 'IV' },
        { value: 1, symbol: 'I' },
    ];

    let result = '';

    for (const { value, symbol } of romanMap) {
        while (num >= value) {
            result += symbol;
            num -= value;
        }
    }

    return result;
};
Enter fullscreen mode Exit fullscreen mode

πŸ” How It Works

  1. Roman Map:

    • Create an ordered list of Roman numeral values and their symbols.
    • Include subtractive notations (CM, XC, etc.) in the map.
  2. Iterate Through the Map:

    • For each numeral, append it to the result while subtracting its value from num until num is less than the numeral’s value.
  3. Return the Result:

    • After processing all numerals, the result contains the Roman numeral string.

πŸ”‘ Complexity Analysis

  • > Time Complexity: O(1), because the number of Roman numeral symbols is constant (13). The loop runs a fixed number of iterations regardless of input size.
  • > Space Complexity: O(1), as we only use a string to build the result.

πŸ“‹ Dry Run

Input: num = 1994
Roman to Integer
Output: "MCMXCIV"


✨ Pro Tips for Interviews

  1. Use a Roman map: Predefining values simplifies the algorithm.
  2. Think about scalability: This solution is efficient since the Roman numeral system has fixed rules and symbols.
  3. Explain constraints: Confirm the input range (1 to 3999) to clarify assumptions.

πŸ“š Learn More

Check out the full explanation and code walkthrough on my Dev.to post:
πŸ‘‰ Roman to Integer - JavaScript Solution

How would you optimize this further? Let’s discuss below! πŸš€

JavaScript #LeetCode #CodingInterview #ProblemSolving

Speedy emails, satisfied customers

Postmark Image

Are delayed transactional emails costing you user satisfaction? Postmark delivers your emails almost instantly, keeping your customers happy and connected.

Sign up

Top comments (1)

Collapse
 
rahulgithubweb profile image
Rahul Kumar Barnwal β€’

Follow Me on GitHub πŸš€

If you found this solution helpful, check out more of my projects and solutions on my GitHub profile.

Don't forget to follow for more updates!

Billboard image

The Next Generation Developer Platform

Coherence is the first Platform-as-a-Service you can control. Unlike "black-box" platforms that are opinionated about the infra you can deploy, Coherence is powered by CNC, the open-source IaC framework, which offers limitless customization.

Learn more

πŸ‘‹ Kindness is contagious

Please leave a ❀️ or a friendly comment on this post if you found it helpful!

Okay