🌕 13. 罗马数字转整数

吞佛童子2022年6月20日
  • algorithm
  • String
大约 1 分钟

🌕 13. 罗马数字转整数

难度: 🌕

问题描述

img_7.png


解法 1

class Solution {
    public int romanToInt(String s) {
        // 思路:
        // 将可能出现结果 与 值 放入 map
        // 每次首先选取 2 个字符,如果能够匹配,则取;不能则取一个字符
        int len = s.length();
        HashMap<String, Integer> map = new HashMap<>();
        map.put("M", 1000);
        map.put("CM", 900);
        map.put("D", 500);
        map.put("CD", 400);
        map.put("C", 100);
        map.put("XC", 90);
        map.put("L", 50);
        map.put("XL", 40);
        map.put("X", 10);
        map.put("IX", 9);
        map.put("V", 5);
        map.put("IV", 4);
        map.put("I", 1);
        int index = 0;
        int res = 0;
        while(index < len) {
            if(index < len - 1) {
                String cur = s.substring(index, index + 2);
                if(map.containsKey(cur)) {
                    res += map.get(cur);
                    index += 2;
                    continue;
                }
            }
            String str = s.substring(index, index + 1);
            if(map.containsKey(str)) {
                res += map.get(str);
                index ++;
            }
        }
        return res;
    }
}

输出 1

img_6.png


解法 2 - 优化

class Solution {
    public int romanToInt(String s) {
        // 思路:
        // 将可能出现结果 与 值 放入 map
        // 优化
        // 可以看出,当 2 个字符表示一个数字时,左边字符会比右边的小,此时 res 需要 减去这个字符的值
        int len = s.length();
        HashMap<Character, Integer> map = new HashMap<>();
        map.put('M', 1000);
        map.put('D', 500);
        map.put('C', 100);
        map.put('L', 50);
        map.put('X', 10);
        map.put('V', 5);
        map.put('I', 1);
        int res = 0;
        for(int i = 0; i < len; i ++) {
            char c = s.charAt(i);
            int cur = map.get(c);
            if(i == len - 1 || cur >= map.get(s.charAt(i + 1))) {
                res += cur;
            } else {
                res -= cur;
            }
        }
        return res;
    }
}

输出

img_8.png

上次编辑于: 2022/6/20 下午8:24:47
贡献者: liuxianzhishou