题目:给定一个罗马数字串,转换为一个整数。
一开始没理解,以为是string to int。后来理解:罗马数字与阿拉伯数字的映射关系,见下图:
至此,题目的意思才掌握明白,用程序模拟这张表。
无可置否,需要将这张表的映射关系存进一个map中,对输入的string查找map中的映射关系。
先贴上代码:(注:substring(startIndex,endIndex)
截取的子字符串是从startIndex处到endIndex-1处为止的)
public int romanToInt(String s) {
Map<String , Integer> roman = new HashMap<String , Integer>();
roman.put("I" , 1);
roman.put("IV" , 4);
roman.put("V" , 5);
roman.put("IX" , 9);
roman.put("X" , 10);
roman.put("XL" , 40);
roman.put("L" , 50);
roman.put("XC" , 90);
roman.put("C" , 100);
roman.put("CD" , 400);
roman.put("D" , 500);
roman.put("CM" , 900);
roman.put("M" , 1000);int result = 0;
int len = s.length();
for(int i = 0 ; i < len ;){
if( len - i >= 2) {
String each = s.substring(i , i + 2);
if(roman.get(each) != null){
result += roman.get(each);
i = i + 2;
continue;
}
}
String each = s.substring(i , i + 1);
result += roman.get(each);
i = i + 1;
}
return result;
}
网络上的map很多只存了1,5,10,100,500,1000这几个值,但是需要一个辅助变量来管理,我觉得那样写绕来绕去的,很容易哪里就绕错了。
如果像我上面那样存1,4,5,9,10...进map。每次只需先判断两位,
while(遍历整个string){
if(该两位string在map中存在)
加上这个map值;
else(如果该两位string在map中不存在)
加上第一位string的map值;
}
清晰好理解。真的很好懂。
[leetcode]_Roman to Integer,布布扣,bubuko.com