Given a roman numeral, convert it to an integer.
Input is guaranteed to be within the range from 1 to 3999.
罗马数字转阿拉伯数字:罗马数字中的 I V X L C D M分别对应阿拉伯数字的1,5,10,50,100,500,1000
规则:(1)左边数字比右边数字小=右边数字-左边数字 如IV=5-1=4
(2)右边数字比左边数字大=左边数字+右边数字 如VI=5+1=6 ;最多三个I X C相连,如III=3’
(3) V 和 X 左边的小数字只能用 Ⅰ。
(4)L 和 C 左边的小数字只能用 ×。
(5)D 和 M 左 边的小数字只能用 C 。
后三点可以不用即,总结规则:如果当右边数字<=左边数字的时候就把数字的值加上,
如果右边数字>左边的,比如ix,要把i减去,但因为在此之前你已经加过一次i了,所以这里要减去两个i.
借助map来解决问题
public int romanToInt(String s) { HashMap<Character,Integer> map=new HashMap(); map.put('I', 1);//i v x l c d m 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 value=map.get(s.charAt(0));//字母对应的数值 for(int i=1;i<s.length();i++){ if(map.get(s.charAt(i))>map.get(s.charAt(i-1))){//右边数字比左边的大比如IV value=value+map.get(s.charAt(i))-2*map.get(s.charAt(i-1)); }else{ value=value+map.get(s.charAt(i)); //如果右边数字<=左边数字,先加上,等下在右边的数字更大时,同时减去两个就可以 } } System.out.println(value); return value; }