个人记录-LeetCode 13. Roman to Integer

问题:
Given a roman numeral, convert it to an integer.
Input is guaranteed to be within the range from 1 to 3999.

这个问题要求将罗马数字转化为阿拉伯数字。
实际上我们只需要关注:每个字符在什么时候需要被转化负数。

根据罗马数字的书写规则:
小数处于大数的左侧时表示负数,且小数此时只能出现一次。
例如:9得用IX表示;但8就得用VIII表示,而不是IIX。

因此,我们知道当输入为1至3999时:
M、D、L、V一定为正;
当C后接上M或D时,C为负;
当X后接上C或L时,X为负;
当I后接上X或V时,I为负。

代码示例:

public class Solution {
    public int romanToInt(String s) {
        if (s == null) {
            return 0;
        }

        int len = s.length();
        int result = 0;

        for (int i = 0; i < len; ++i) {
            switch (s.charAt(i)) {
                case 'M':
                    result += 1000;
                    break;
                case 'D':
                    result += 500;
                    break;
                case 'C':
                    if((i + 1 < len) && (s.charAt(i+1) == 'M' || s.charAt(i+1) == 'D')) {
                        result -= 100;
                    } else {
                        result += 100;
                    }
                    break;
                case 'L':
                    result += 50;
                    break;
                case 'X':
                    if ((i + 1 < len) && (s.charAt(i+1) == 'C' || s.charAt(i+1) == 'L')) {
                        result -= 10;
                    } else {
                        result += 10;
                    }
                    break;
                case 'V':
                    result += 5;
                    break;
                case 'I':
                    if ((i + 1 < len) && (s.charAt(i+1) == 'X' || s.charAt(i+1) == 'V')) {
                    result -= 1;
                } else {
                    result += 1;
                }
                break;
            }
        }

        return result;
    }
}

你可能感兴趣的:(个人记录-LeetCode 13. Roman to Integer)