1.题目
给定一个罗马数字,将其转换成整数。输入确保在 1 到 3999 的范围内。
2.思路
罗马数字符合下面规律
对于两个及以上的罗马数字:
如果当前元素比下一个元素小,那么就是减去这个元素
否则,就是加上这个元素
3.代码
public int romanToInt(String s) {
//初始化map
HashMap<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);
//如果s的长度为1,直接返回对应的值
if (s.length() == 1) {
return map.get(s.charAt(0));
}
//遍历s,如果当前元素比下一个元素小,就减去这个元素,否则加上,
int sum = 0;
for (int i = 0; i < s.length() - 1; i++) {
Integer m = map.get(s.charAt(i));
Integer n = map.get(s.charAt(i + 1));
if (m >= n) {
sum += m;
} else {
sum -= m;
}
}
sum += map.get(s.charAt(s.length() - 1));
return sum;
}