Bootstrap

Leetcode-13.罗马数字转整数

将罗马数字转换为整数,可以利用一个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
    }
}

;