Created
August 21, 2020 04:59
-
-
Save AbhiAgarwal192/cdde3fd3e6bd92396778413437b612c7 to your computer and use it in GitHub Desktop.
Given a roman numeral, convert it to an integer.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
public class Solution { | |
public int RomanToInt(string s) { | |
int len = s.Length; | |
int num = 0; | |
int i=0; | |
while(i<len){ | |
if(i-1>=0 && s[i] == 'V' && s[i-1] == 'I'){ | |
num = num + 4; | |
} | |
else if(s[i] == 'V'){ | |
int j = i; | |
int five = 0; | |
while(j<len && s[j] == 'V'){ | |
five++; | |
j++; | |
} | |
num = num + 5*five; | |
i = j; | |
i--; | |
} | |
else if(i-1>=0 && s[i] == 'X' && s[i-1] == 'I'){ | |
num = num + 9; | |
} | |
else if(s[i] == 'X'){ | |
int j = i; | |
int ten = 0; | |
while(j<len && s[j] == 'X'){ | |
ten++; | |
j++; | |
} | |
if(j<len && (s[j] == 'L' || s[j] == 'C')){ | |
ten--; | |
} | |
num = num + 10*ten; | |
i = j; | |
i--; | |
} | |
else if(i-1>=0 && s[i] == 'L' && s[i-1] == 'X'){ | |
num = num + 40; | |
} | |
else if(s[i] == 'L'){ | |
int j = i; | |
int fifty = 0; | |
while(j<len && s[j] == 'L'){ | |
fifty++; | |
j++; | |
} | |
num = num + 50*fifty; | |
i = j; | |
i--; | |
} | |
else if(i-1>=0 && s[i] == 'C' && s[i-1] == 'X'){ | |
num = num + 90; | |
} | |
else if(s[i] == 'C'){ | |
int j = i; | |
int hundred = 0; | |
while(j<len && s[j] == 'C'){ | |
hundred++; | |
j++; | |
} | |
if(j<len && (s[j] == 'D' || s[j] == 'M')){ | |
hundred--; | |
} | |
num = num + 100*hundred; | |
i = j; | |
i--; | |
} | |
else if(i-1>=0 && s[i] == 'D' && s[i-1] == 'C'){ | |
num = num + 400; | |
} | |
else if(s[i] == 'D'){ | |
int j = i; | |
int fivehundred = 0; | |
while(j<len && s[j] == 'D'){ | |
fivehundred++; | |
j++; | |
} | |
num = num + 500*fivehundred; | |
i = j; | |
i--; | |
} | |
else if(i-1>=0 && s[i] == 'M' && s[i-1] == 'C'){ | |
num = num + 900; | |
} | |
else if(s[i] == 'M'){ | |
int j = i; | |
int thousand = 0; | |
while(j<len && s[j] == 'M'){ | |
thousand++; | |
j++; | |
} | |
num = num + 1000*thousand; | |
i = j; | |
i--; | |
} | |
else{ | |
int j = i; | |
int one = 0; | |
while(j<len && s[j] == 'I'){ | |
one++; | |
j++; | |
} | |
if(j<len && (s[j] == 'V' || s[j] == 'X')){ | |
one--; | |
} | |
num = num + one; | |
i = j; | |
i--; | |
} | |
i++; | |
} | |
return num; | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment