LEEDCODE 13 Roman to Integer (JAVA題解)
阿新 • • 發佈:2019-01-08
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>