标签:
Question:
Given a roman numeral, convert it to an integer.
Input is guaranteed to be within the range from 1 to 3999.
简单介绍一下罗马数字,摘自维基百科
罗马数字共有7个,即I(1)、V(5)、X(10)、L(50)、C(100)、D(500)和M(1000)。按照下述的规则可以表示任意正整数。需要注意的是罗马数字中没有“0”,与进位制无关。一般认为罗马数字只用来记数,而不作演算。
Code:
1 /* 2 Use hashmap
3 */
import java.util.HashMap;
import java.util.Map;
4 public int romanToInt(String s) { 5 if (s == null || s.length()==0) return 0; 6 Map<Character, Integer> m = new HashMap<Character, Integer>(); 7 m.put(‘I‘, 1); 8 m.put(‘V‘, 5); 9 m.put(‘X‘, 10); 10 m.put(‘L‘, 50); 11 m.put(‘C‘, 100); 12 m.put(‘D‘, 500); 13 m.put(‘M‘, 1000); 14 15 int length = s.length(); 16 int result = m.get(s.charAt(length - 1)); //from right to left 17 for (int i = length - 2; i >= 0; i--) { // backwards 18 if (m.get(s.charAt(i + 1)) <= m.get(s.charAt(i))) 19 result += m.get(s.charAt(i)); 20 else 21 result -= m.get(s.charAt(i)); 22 } 23 return result; 24 }
Run time: 460ms
标签:
原文地址:http://www.cnblogs.com/anne-vista/p/4790484.html