【LeetCode】 13 罗马数字转整数

在这里插入图片描述


解题思路:
1 很明显,有两种字符形式:一个字母和两个字母,可以进行分别讨论。
2 对两种分别建字典,分别处理。
3 这种方法思路较清晰,但是较慢;较快的思路是对字符串连续读,如果右边字母表示的数字比左边的大,则在结果中减去此值,代码就不贴了。

代码:

class Solution {
    final static String[] ROMAN = {"M", "D", "C", "L", "X", "V", "I"};
    final static String[] ROMAN2 = {"CM", "CD", "XC", "XL", "IX", "IV"};
    final static int[] NUMBER = {1000, 500, 100, 50, 10, 5, 1};
    final static int[] NUMBER2 = {900, 400, 90, 40, 9, 4};
    public int romanToInt(String s) {
        int result = 0;
        
        char[] input = s.toCharArray();
        int length = s.length();
        boolean flag = false;
        
        for (int i = 0;i < length; i++){
            flag = false;
            String tmp = String.valueOf(input[i]);
            
            if ((input[i] == 'C'|| input[i] == 'X' || input[i] == 'I') && i != length - 1){
                String tmp2 = tmp + input[i+1];
                for (int j = 0;j < ROMAN2.length;j++){
                    if (tmp2.equals(ROMAN2[j])){
                        result += NUMBER2[j];
                        i++;
                        flag = true;
                        break;
                    }
                }
            }
            
            if (flag)
                continue;

            for (int k = 0;k < ROMAN.length;k++){
                if (tmp.equals(ROMAN[k])){
                    result += NUMBER[k];
                    break;
                }
            }
            
            
        }
        
        return result;
    }
}

猜你喜欢

转载自blog.csdn.net/qq_36269372/article/details/84778020