【leetcode刷题笔记】Roman to Integer

Given a roman numeral, convert it to an integer.

Input is guaranteed to be within the range from 1 to 3999.


 

题解:转换的方法:从左往右扫描罗马字符,如果当前的字符对应的数字比上一个数字小,就直接加上这个数字;否则加上这个数字并且减去上一个数字的两倍,然后更新上一个数字。利用一个HashMap存放罗马字符和数字的对应。

罗马数字和阿拉伯数字的对应表格参见http://www.cnblogs.com/sunshineatnoon/p/3856057.html

例如罗马数字DCXIX:500+100+10+1+10-2 = 619

代码如下:

 1 public class Solution {
 2     public int romanToInt(String s) {
 3         if(s == null || s.length() == 0)
 4             return 0;
 5         
 6         HashMap<Character, Integer> map= new HashMap<Character,Integer>();
 7         map.put('I', 1);
 8         map.put('V', 5);
 9         map.put('X', 10);
10         map.put('L', 50);
11         map.put('C', 100);
12         map.put('D', 500);
13         map.put('M', 1000);
14         
15         int length = s.length();
16         int result = map.get(s.charAt(0));
17         int last = result;
18         
19         for(int i = 1;i < length;i++){
20             int temp = map.get(s.charAt(i));
21             if(temp <= last)
22                 result += temp;
23             else
24                 result = result + temp - 2*last;
25             last = temp;
26         }
27         
28         return result;
29     }
30 }
posted @ 2014-07-20 12:29  SunshineAtNoon  阅读(176)  评论(0编辑  收藏  举报