1. 程式人生 > >LEEDCODE 13 Roman to Integer (JAVA題解)

LEEDCODE 13 Roman to Integer (JAVA題解)

https://leetcode.com/problems/roman-to-integer/

原題的連結如上

題意解析:

題目要求把羅馬數轉換為阿拉伯整數,輸入是一個字串,輸出是一個整數

羅馬數字與整數的對應規則是:

I(1) V(5) X(10) L(50) C(100) D(500) M(1000)

解題思路:

為了方便下面的操作,先建立一個map,記錄羅馬數字與整數的對應關係

在遍歷字串的時候,只需要處理兩類特殊情況,如

4 IV 9 IX 

40 XL 90 XC.........

具體處理方法是:

如果遍歷到的那個字元不是字串的最後一個字元,檢查它對應的整數值是不是它下一個字元的5分之一或者是十分之一,如果是的話,最後結果就要減去這個字元對應的整數值

除了上述情況以外, 其他情況都屬於正常情況,正常情況的處理方法是,讓結果加上該字元對應的整數值

題解程式碼如下:

<span style="font-size:24px;">public int romanToInt(String s) {
        int result=0;
        Map<Character,Integer> roaMap=new HashMap<Character,Integer>();
        roaMap.put('I',1);
        roaMap.put('V',5);
        roaMap.put('X',10);
        roaMap.put('L',50);
        roaMap.put('C',100);
        roaMap.put('D',500);
        roaMap.put('M',1000);
        
        int i=0;
        while(i<s.length()){
            if(i+1<s.length() && (roaMap.get(s.charAt(i+1)).equals(roaMap.get(s.charAt(i))*5) || 
            roaMap.get(s.charAt(i+1)).equals(roaMap.get(s.charAt(i))*10))){
                result-=(Integer)roaMap.get(s.charAt(i));
            }else{
                result+=(Integer)roaMap.get(s.charAt(i));
            }
            i++;
        }
        return result;
    }</span>