给定一个罗马数字,将其转换成整数。输入确保在 1 到 3999 的范围内。
示例 1:
输入: "III" 输出: 3
示例 2:
输入: "IV" 输出: 4
示例 3:
输入: "IX" 输出: 9
示例 4:
输入: "LVIII" 输出: 58 解释: L = 50, V= 5, III = 3.
示例 5:
输入: "MCMXCIV" 输出: 1994 解释: M = 1000, CM = 900, XC = 90, IV = 4.
解题思路:
这道题如果懂了罗马数字的逻辑规律很简单
方法如下:
- 一旦后一个字符代表的数字大于前一个字符,那么这两个字符为一组,表示的数位后面的字符对应的数值减去前面字符对应的数值
- 代码中,先使用Hashmap塑造一个hash表,存储字符->数值的映射,然后遍历完成1中过程
class Solution {
public int romanToInt(String s) {
int res = 0;
Map<Character, Integer> map = new HashMap<>();
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);
char[] ss = s.toCharArray();
for (int i = 0; i < ss.length; ++i) {
if (i == 0 || map.get(ss[i]) <= map.get(ss[i - 1]))
res += map.get(ss[i]);
else
res += map.get(ss[i]) - 2 * map.get(ss[i - 1]);
}
return res;
}
}