将罗马数字转换为整数,可以利用一个HashMap来存储每个罗马字符对应的数值。然后从左到右遍历给定的字符串,并根据罗马数字的规则进行累加或减法操作。
1.如果当前字符代表的数值小于右边,做减法
2.~做加法
实现步骤
S1:创建映射
使用一个哈希映射来存储每个罗马字符对应的数值
S2:遍历字符串
①从左至右遍历罗马数字字符串
②对于每一个字符,检查是否小于右边字符,如果是,说明是特殊情况,如IV,做减法
S3:处理边界情况
确保在最后一位时不会尝试访问不存在的下一个字符
import java.util.HashMap;
import java.util.Map;
public class Solution {
public int romanToInt(String s) {
// 创建一个哈希映射,用于存储罗马字符和它们对应的值
Map<Character, Integer> romanMap = new HashMap<>();
romanMap.put('I', 1);
romanMap.put('V', 5);
romanMap.put('X', 10);
romanMap.put('L', 50);
romanMap.put('C', 100);
romanMap.put('D', 500);
romanMap.put('M', 1000);
int result = 0;
for (int i = 0; i < s.length(); i++) {
// 获取当前字符的值
int current = romanMap.get(s.charAt(i));
// 如果不是最后一个字符且当前字符的值小于下一个字符的值
if (i + 1 < s.length() && current < romanMap.get(s.charAt(i + 1))) {
// 当前字符应该被减去
result -= current;
} else {
// 否则,加上当前字符的值
result += current;
}
}
return result;
}
public static void main(String[] args) {
Solution solution = new Solution();
System.out.println(solution.romanToInt("III")); // 输出: 3
System.out.println(solution.romanToInt("IV")); // 输出: 4
System.out.println(solution.romanToInt("IX")); // 输出: 9
System.out.println(solution.romanToInt("LVIII")); // 输出: 58
System.out.println(solution.romanToInt("MCMXCIV")); // 输出: 1994
}
}