13. Roman to Integer

来源:互联网 发布:阿里巴巴农村淘宝图片 编辑:程序博客网 时间:2024/05/21 06:19

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;    }


0 0
原创粉丝点击