/**13. Roman to Integer
* @param s
* @returnint
*/
public int romanToInt(String s) {
if (s == null || s.length() == 0)
return 0;
Map<Character , Integer> map = new HashMap<Character, Integer>();
map.put('I',1);
map.put('V',5);
map.put('X',10);
map.put('L',50);
map.put('C',100);
map.put('D',500);
map.put('M',1000);
int ret = map.get(s.charAt(0));
for (int i=1, len=s.length(); i<len; i++) {
int cur = map.get(s.charAt(i));
int pre = map.get(s.charAt(i-1));
if (cur <= pre) {
ret += cur;
} else {
ret += cur-2*pre;
}
}
return ret;
}
//注意,计算方法
/*1. 若干相同数字连写表示的数是这些罗马数字的和,如 III=3;
2. 小数字在大数字前面表示的数是用大数字减去小数字,如 IV=4;
3. 小数字在大数字后面表示的数是用大数字加上小数字,如 VI=6;*/
//直接从后往前算,不用考虑那么多规则了,除了小在大前面要用大减小之外,其他就累加