Roman to Integer - Leetcode Problems

 Roman to Integer

(Leetcode Problems)


Previously I have solved a problem to convert Integer to Roman. You can find that blog post as Roman Numeral Converter

Problem: 

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, 2 is written as II in Roman numerals, just two one's added together. 12 is written as XII, which is simply X + II. The number 27 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 a roman numeral, convert it to an integer.

 

Example 1:

Input: s = "III"
Output: 3

 

Example 2:

Input: s = "IV"
Output: 4

 

Example 3:

Input: s = "IX"
Output: 9

 

Example 4:

Input: s = "LVIII"
Output: 58
Explanation: L = 50, V= 5, III = 3.

 

Example 5:

Input: s = "MCMXCIV"
Output: 1994
Explanation: M = 1000, CM = 900, XC = 90 and IV = 4.

 

 

Constraints:

  • 1 <= s.length <= 15

  • s contains only the characters ('I', 'V', 'X', 'L', 'C', 'D', 'M').

  • It is guaranteed that s is a valid roman numeral in the range [1, 3999].

SOLUTION: 

/**
* @param {string} s
* @return {number}
*/
var romanToInt = function(s) {
   
    const arr = {
        "I" : 1,
        "V" : 5,
        "X" : 10,
        "L" : 50,
        "C" : 100,
        "D" : 500,
        "M" : 1000
    };
   
    let romans = s.split("");
    let numbers = romans.map(i => {
        return arr[i]
    })
   
    let sum = 0;
    for(let i=0;i<numbers.length;i++) {
        if(i!=(numbers.length-1) && numbers[i] < numbers[i+1]) {
            sum = sum - numbers[i];
        } else {
            sum+=numbers[i]
        }
    }
   
    return sum;
   
};


Explanation: 

This function accepts Roman numerals and converts them into corresponding numbers. arr is an object which holds Roman numerals and its values. 


Step 1:

let romans = s.split("");
//s is a given input. We have used JavaScript function split to convert //input into an array.

Step 2:

let numbers = romans.map(i => {
        return arr[i]
    });
//we have converted Roman numerals array into corresponding number array


Step 3:

    let sum = 0;
    for(let i=0;i<numbers.length;i++) {
        if(i!=(numbers.length-1) && numbers[i] < numbers[i+1]) {
            sum = sum - numbers[i];
        } else {
            sum+=numbers[i]
        }
    }
// At first create a variable sum and assign it a value to 0. Our main logic here is that when moving from left to right if a smaller value comes in-between then that value should be subtracted and others should be added. So we are using for loop and used if condition to check if it contains any smaller value in-between.


Finally, the value is stored in variable sum and we should return that.


This is a leetcode problem. You can find this problem here.


Roman to Integer - LeetCode



Post a Comment

Previous Post Next Post