Given a roman numeral, convert it to an integer.
Input is guaranteed to be within the range from 1 to 3999.
Note: I got this problem in one interview.
First of all. what is Roman number. We can check the blog about Roman Number.
Then, we need to know very clear how the roman number to calculate the numbers.
- when the digits are the same, then we only need to add them together,
- if small number is behind the large number, add the number together.
- if small number is before the large number, then the number should be the larger number minus the smaller number.
class Solution {
public:
int romanToInt(string s) {
int result = 0;
if(s.size() <= 0) return 0;
for(int i = 0; i< s.size() ; i++){
if((i > 0) && (rtoi(s[i]) > rtoi(s[i - 1]))){
result += rtoi(s[i]) - 2 * rtoi(s[i - 1]) ;
}else{
result += rtoi(s[i]);
}
}
return result;
}
private:
int rtoi(char c){
switch(c){
case 'I':
return 1;
break;
case 'V':
return 5;
break;
case 'X':
return 10;
break;
case 'L':
return 50;
break;
case 'C':
return 100;
break;
case 'D':
return 500;
break;
case 'M':
return 1000;
break;
default:
return 0;
break;
}
}
};