给定一个罗马数字,将其转换成整数。
返回的结果要求在1到3999的范围内。
什么是 罗马数字?
IV
-> 4
XII
-> 12
XXI
-> 21
XCIX
-> 99
/*
思路:
1.先建立一个map存入一些罗马符号对应的数字
2.先求出字符串最后一个罗马字符对应的数字res
3.从后开始遍历,如果后一个罗马符号大于前一个,则为res减去前一个罗马对应数字
如果后小于前,则加上
*/
public class Solution {
public int romanToInt(String s) {
if (s == null || s.length()==0) {
return 0;
}
Map<Character, Integer> m = new HashMap<Character, Integer>();
m.put('I', 1);
m.put('V', 5);
m.put('X', 10);
m.put('L', 50);
m.put('C', 100);
m.put('D', 500);
m.put('M', 1000);
int length = s.length();
//已经求出最后一个罗马数表示的整数
int res = m.get(s.charAt(length - 1));
//从尾到头遍历
for (int i = length - 1; i >= 1; i--) {
//VI 如果1<5
if (m.get(s.charAt(i)) <= m.get(s.charAt(i-1))) {
res += m.get(s.charAt(i-1));
//IV 如果5>1
} else {
res -= m.get(s.charAt(i-1));
}
}
return res;
}
}