欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

13.罗马数字转整数

程序员文章站 2023-12-27 18:19:27
...

题目描述:

和12中整数转罗马数字一样。

区别:

遍历字符串时,需要考虑下一位是不是特殊情况和是否越界。

解答:

public static int romanToInt(String s) {
        // 可以通过两个数组,一一对应就可以
        int[] vals = { 1000, 500, 100, 50, 10, 5, 1 };
        char[] romans = { 'M', 'D', 'C', 'L', 'X', 'V', 'I' };
        int num = 0;
        //定义两个变量,一个用来遍历数组,一个用来遍历罗马字符串
        for (int i = 0, j = 0; i < romans.length; i++) {
            //字符指针需要考虑到字符串长度-2【否则溢出】; 判断罗马字符是否与数组中字符匹配
            while (j < s.length() - 1 && (s.charAt(j) == romans[i])) {
                //判断罗马字符是否为特殊情况 C
                if (s.charAt(j) == 'C') {
                    if (s.charAt(j + 1) == 'M') {
                        num += 900;
                        //罗马字符指针后移两位
                        j += 2;
                    } else if (s.charAt(j + 1) == 'D') {
                        num += 400;
                        j += 2;
                    } else {
                        //整数加上数组中值就可以
                        num += vals[i];
                        //罗马字符指针后移一位
                        j += 1;
                    }
                } else if (s.charAt(j) == 'X') {
                    if (s.charAt(j + 1) == 'C') {
                        num += 90;
                        j += 2;
                    } else if (s.charAt(j + 1) == 'L') {
                        num += 40;
                        j += 2;
                    } else {
                        num += vals[i];
                        j += 1;
                    }
                } else if (s.charAt(j) == 'I') {
                    if (s.charAt(j + 1) == 'V') {
                        num += 4;
                        j += 2;
                    } else if (s.charAt(j + 1) == 'X') {
                        num += 9;
                        j += 2;
                    } else {
                        num += vals[i];
                        j += 1;
                    }
                } else {
                    //判断罗马字符不是特殊情况 直接加数组中的值,字符指针后移一位
                    num += vals[i];
                    j += 1;
                }
            }
            //字符指针在字符串最后一位时
            while ((j == s.length() - 1) && (s.charAt(j) == romans[i])) {
                num += vals[i];
                j += 1;
            }
        }
        return num;
    }

上一篇:

下一篇: