Roman to Integer
40% Accepted
Given a roman numeral, convert it to an integer.
The answer is guaranteed to be within the range from 1 to 3999.
Have you met this question in a real interview? Yes
Example
IV -> 4
XII -> 12
XXI -> 21
XCIX -> 99
Clarification
What is Roman Numeral?
https://en.wikipedia.org/wiki/Roman_numerals
https://zh.wikipedia.org/wiki/%E7%BD%97%E9%A9%AC%E6%95%B0%E5%AD%97
http://baike.baidu.com/view/42061.htm
Tags Expand
- String
思路
- 避免写很多条件,所以自己用了hashmap来存起来,先找两个字母的,找到了就加上,没找到肯定就是一个字母的
- 这里用了小trick,在string后面自己添加了一个不是罗马数字的字符,来避免越过边界的条件
public class Solution {
public int romanToInt(String s) {
if (s == null) {
return 0;
}
String[] symbols = {"M","CM","D","CD","C","XC","L","XL","X","IX","V","IV","I"};
int[] values = {1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1};
int sum = 0;
int j = 0;
for (int i = 1; i <= s.length();) {
while (j < symbols.length) {
String cur = symbols[j];
int size = cur.length();
if (size == 1 && s.substring(i - 1, i).equals(symbols[j])) {
sum += values[j];
i++;
break;
}
if (i != s.length() && size == 2 && s.substring(i - 1, i + 1).equals(symbols[j])) {
sum += values[j];
i += 2;
break;
}
j++;
}
}
return sum;
}
}