示例

/**
 * 示例 1:
 *
 * 输入: s = "III"
 * 输出: 3
 * 示例 2:
 *
 * 输入: s = "IV"
 * 输出: 4
 * 示例 3:
 *
 * 输入: s = "IX"
 * 输出: 9
 * 示例 4:
 *
 * 输入: s = "LVIII"
 * 输出: 58
 * 解释: L = 50, V= 5, III = 3.
 * 示例 5:
 *
 * 输入: s = "MCMXCIV"
 * 输出: 1994
 * 解释: M = 1000, CM = 900, XC = 90, IV = 4.
 * @param args
 */

代码

public static void main(String[] args) {
    Class13 class13 = new Class13();
    System.out.println(class13.romanToInt("III"));
    System.out.println(class13.romanToInt("IV"));
    System.out.println(class13.romanToInt("IX"));
    System.out.println(class13.romanToInt("LVIII"));
    System.out.println(class13.romanToInt("MCMXCIV"));
}

public int romanToInt(String s) {
    Map<String, 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);

    int total = 0;
    List<Integer> list = new ArrayList<>();
    for (int i = 0; i < s.length(); i++) {
        char c = s.charAt(i);
        String s1 = String.valueOf(c);
        Integer tempValue = map.get(s1);
        list.add(tempValue);

        if (i + 1 < s.length()) {
            char tempChar = s.charAt(i + 1);
            String s2 = String.valueOf(tempChar);
            if (map.get(s2) > tempValue) {
                total -= tempValue;
            } else {
                total += tempValue;
            }
        } else {
            total += tempValue;
        }
    }

    System.out.println(list);
    return total;
}

解析

罗马数字主要特点
ABA
若A小于B,那么数值是B-A+A,根据位置的不同计算不同的数值,需要判断数字在哪个位置,与下一个数字进行比较
可以先把所有罗马字转换成数值,然后再进行对比、计算

最后修改:2023 年 12 月 08 日
如果觉得我的文章对你有用,请随意赞赏