[Leetcode] Roman to Integer
Roman to Integer
I:1
V:5
X:10
L:50
C:100
D:500
M:1000
这个问题的求解已经很清楚了:在每次累加的时候记录前面的遇到的字符所对应的数字,如果当前字符所对应的数字比前面的大,则应该减去两倍的前面的字符所对应的数字。
附上代码。
这里还有一个收获是对map的一个初始化方式。
public int romanToInt(String s) { Map<Character,Integer> map = new HashMap<Character,Integer>(){{ put('I',1); put('V',5); put('X',10); put('L',50); put('C',100); put('D',500); put('M',1000); }};
1 import java.util.*; 2 3 public class Solution { 4 public int romanToInt(String s) { 5 Map<Character,Integer> map = new HashMap<Character,Integer>(){{ 6 put('I',1); 7 put('V',5); 8 put('X',10); 9 put('L',50); 10 put('C',100); 11 put('D',500); 12 put('M',1000); 13 }}; 14 int pre = 0; 15 int res = 0; 16 for(int i=0;i<s.length();i++){ 17 char c = s.charAt(i); 18 res+=map.get(c).intValue(); 19 if(map.get(c).intValue()>pre){ 20 res-=2*pre; 21 } 22 pre = map.get(c).intValue(); 23 } 24 return res; 25 } 26 }