Topic | Difficulty | Companies |
---|---|---|

Mathematical Algorithms | Medium | Amazon|Microsoft|Facebook|Twitter |

Given a string **S** representing a roman numeral. Convert S into integer.

**Problem Note**

**S**is guaranteed to be within the range from**1**to**3999**.- Roman numerals are represented by seven different symbools :

```
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, so we subtract one from five to make it 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.

**Input Format**

```
The only argument given is string A.
```

**Output Format**

`Return an integer which is the integer verison of roman numeral string.`

**Example 1**

```
Input: "III"
Output: 3
```

**Example 2**

```
Input: "IV"
Output: 4
```

**Example 3**

```
Input: "IX"
Output: 9
```

**Example 4**

```
Input: "LVII"
Output: 57
Explanation: L = 50, V= 5, II = 2.
```

**Hints 1**

Note how the number XVI(10+5+1) and XIV(10-1+5) differs.

In one case we are adding the numeric value of a letter and in other case we are subtracting it. How can you simulate this?

**Solution Approach**

The key is to notice that in a valid Roman numeral representation the letter with the most value always occurs at the start of the string.

Whenever a letter with lesser value precedes a letter of higher value, it means its value has to be added as negative of that letterâ€™s value.

In all other cases, the values get added.

**Solution**

```
class Solution {
public int romanToInt(String s) {
int nums[] = new int[s.length()];
for(int i = 0; i < s.length(); i++){
switch (s.charAt(i)) {
case 'M':
nums[i] = 1000;
break;
case 'D':
nums[i] = 500;
break;
case 'C':
nums[i] = 100;
break;
case 'L':
nums[i] = 50;
break;
case 'X' :
nums[i] = 10;
break;
case 'V':
nums[i] = 5;
break;
case 'I':
nums[i] = 1;
break;
}
}
int sum = 0;
for(int i=0; i<nums.length-1; i++){
if(nums[i] < nums[i+1])
sum -= nums[i];
else
sum += nums[i];
}
return sum + nums[nums.length-1];
}
}
```