13. 罗马数字转整数

题目:

思路:

【1】首先很重要的一点便是最后一个字符转成值必然是要加的,其次如果某个字符比下一个字符的值要小就是需要减的。

代码展示:

//时间4 ms 击败 58.62%
//内存42.3 MB 击败 49.45%
class Solution {
    public int romanToInt(String s) {
        HashMap<Character, Integer> map = new HashMap<Character, Integer>() {{
            put('I',1);
            put('V',5);
            put('X',10);
            put('L',50);
            put('C',100);
            put('D',500);
            put('M',1000);
        }};
        int result = 0 , cur = 0;
        for (int i = 0; i < s.length(); i++){
            // 获取到当前字符所代表的的值
            cur = map.get(s.charAt(i));
            // 判断该值是该加还是该减
            // 首先如果是最后一个字符,必然是加的
            // 其次如果该字符是要减的话必然是比下一个字符要小,否则还是加的
            if (i < s.length() - 1 && cur < map.get(s.charAt(i+1)) ){
                result -= cur;
            }else {
                result += cur;
            }
        }
        return result;
    }
}


//时间2 ms 击败 100%
//内存42.3 MB 击败 48.15%
class Solution {
    public int romanToInt(String s) {
        int result = 0 , cur = 0;
        for (int i = 0; i < s.length(); i++){
            // 获取到当前字符所代表的的值
            cur = getInt(s.charAt(i));
            // 判断该值是该加还是该减
            // 首先如果是最后一个字符,必然是加的
            // 其次如果该字符是要减的话必然是比下一个字符要小,否则还是加的
            if (i < s.length() - 1 && cur < getInt(s.charAt(i+1)) ){
                result -= cur;
            }else {
                result += cur;
            }
        }
        return result;
    }

    public int getInt(char romanDigit) {
        switch (romanDigit) {
            case 'I':
                return 1;
            case 'V':
                return 5;
            case 'X':
                return 10;
            case 'L':
                return 50;
            case 'C':
                return 100;
            case 'D':
                return 500;
            case 'M':
                return 1000;
            default:
                return 0;
        }
    }
}

 

posted @ 2023-06-25 14:57  忧愁的chafry  阅读(4)  评论(0编辑  收藏  举报