13. 罗马数字转整数
1、题目要求
题目描述
示例
示例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.
2、代码思路
罗马数字由 7 个单字母符号组成,每个符号都有自己的价值。此外,减法规则(如问题描述中所述)给出了额外的 6 个符号。这给了我们总共 13 个独特的符号(每个符号由 1 个字母或 2 个字母组成)。
解题思路:
遍历字符串中每一个字符,如果当前字符比后面字符小,则说明是类似于 CM,CD 这类罗马字符,应该用 M 代表的数值减去 C 代表的数值,否则进行累加即可
3、代码实现
class Solution {
public int romanToInt(String str) {
HashMap<Character, Integer> romanCharToValue = new HashMap<>();
romanCharToValue.put('I', 1);
romanCharToValue.put('V', 5);
romanCharToValue.put('X', 10);
romanCharToValue.put('L', 50);
romanCharToValue.put('C', 100);
romanCharToValue.put('D', 500);
romanCharToValue.put('M', 1000);
char[] chars = str.toCharArray();
int res = 0;
for (int i = 0; i < chars.length; i++) {
if ((i + 1 < chars.length) && romanCharToValue.get(chars[i]) < romanCharToValue.get(chars[i + 1])){
res += (romanCharToValue.get(chars[i + 1]) - romanCharToValue.get(chars[i]));
i++;
} else{
res += romanCharToValue.get(chars[i]);
}
}
return res;
}
}