标签:style blog class c code java
题目:给定一个罗马数字串,转换为一个整数。
一开始没理解,以为是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
标签:style blog class c code java
原文地址:http://www.cnblogs.com/glamourousGirl/p/3730760.html