⬆︎
×

[LC] 0013 Roman to Integer

Java

/**
 * <a href="https://leetcode.com/problems/roman-to-integer/">Roman to Integer</a>
 */
class Solution {
    public int romanToInt(String s) {
        int res = 0;
        char[] chars = s.toCharArray();

        int length = chars.length;
        for (int i = 0; i < length; i++) {
            char ch = chars[i];
            switch (ch) {
                case 'M':
                    res += 1000;
                    break;
                case 'D':
                    res += 500;
                    break;
                case 'C':
                    if (i + 1 == length) {
                        res += 100;
                    } else {
                        if (chars[i + 1] == 'M') {
                            res += 900;
                            i++;
                        } else if (chars[i + 1] == 'D') {
                            res += 400;
                            i++;
                        } else {
                            res += 100;
                        }
                    }
                    break;
                case 'L':
                    res += 50;
                    break;
                case 'X':
                    if (i + 1 == length) {
                        res += 10;
                    } else {
                        if (chars[i + 1] == 'C') {
                            res += 90;
                            i++;
                        } else if (chars[i + 1] == 'L') {
                            res += 40;
                            i++;
                        } else {
                            res += 10;
                        }
                    }
                    break;
                case 'V':
                    res += 5;
                    break;
                case 'I':
                    if (i + 1 == length) {
                        res += 1;
                    } else {
                        if (chars[i + 1] == 'X') {
                            res += 9;
                            i++;
                        } else if (chars[i + 1] == 'V') {
                            res += 4;
                            i++;
                        } else {
                            res += 1;
                        }
                    }
                    break;
                default:
                    break;
            }
        }

        return res;
    }

//    Map<Character, Integer> symbolValues = new HashMap<>() {{
//        put('I', 1);
//        put('V', 5);
//        put('X', 10);
//        put('L', 50);
//        put('C', 100);
//        put('D', 500);
//        put('M', 1000);
//    }};
//
//    public int romanToInt(String s) {
//        int res = 0;
//        int n = s.length();
//        for (int i = 0; i < n; ++i) {
//            int value = symbolValues.get(s.charAt(i));
//            if (i < n - 1 && value < symbolValues.get(s.charAt(i + 1))) {
//                res -= value;
//            } else {
//                res += value;
//            }
//        }
//        return res;
//    }
}

发表评论