LeetCode-罗马数字转整数

2020-03-31  本文已影响0人  沙漠小舟

题目链接 => 戳这里


解析

其实这道题目最重要的一个点是罗马数字如果小的值在大的值左边,那么小的值就要当作负数来算,否则当作正数,转换一下,也就是我们遍历这个罗马数字字符串的时候,要关注它的下一个数和自身的比较值,用于判断自身是正数还是负数。这里的边界情况是,当遍历到最后一个数时,它没有下一个值了,那么它也一定是正数了。

解法

class Solution {
    public int romanToInt(String s) {
        Character ch = s.charAt(0);
        int preNum = getValue(ch);
        int num = 0;
        for (int i = 1; i < s.length(); i++) {
            Character ch1 = s.charAt(i);
            int temp = getValue(ch1);
            if (preNum < temp) {
                num -= preNum;
            } else {
                num += preNum;
            }
            preNum = temp;
        }
        // 最后一位数,一定是正数
        num += preNum;
        return num;
    }

    private static int getValue(Character ch) {
        switch(ch) {
            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;
        }
    }
}
上一篇 下一篇

猜你喜欢

热点阅读