1. 程式人生 > >【LeetCode】 13 羅馬數字轉整數

【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;
    }
}