該算法是將羅馬數字轉換為整數,思路如下:比如IXX,使用臨時變量temp保存上一個已經遍歷的羅馬數字,比如:
遍歷時是從后往前遍歷的:
1> 剛開始時,temp = 0; 遍歷當前遍歷到第一個X,則temp == 0 < 10 == X ,則res = 10;temp = 10;
2> 繼續向前遍歷,又遇到X,此時temp == 10 = 10 == X,則 res = res + 10;即res = 20; temp = 10;
3> 繼續向前遍歷,遇到I,此時temp == 10 > 1 == I; 則 res = res - 1; 即res = 19; temp = 1;
循環終止;
1 public class Solution {
2 // 基本思想是根據羅馬數字的特征,即左加右減的規律, 比如IX = 9, XI =11
3 public int romanToInt(String s) {
4 if(s == null || s.length() < 1)
5 return -1;
6 char[] ch = s.toCharArray();
7 HashMap<Character, Integer> hm = new HashMap<Character, Integer>();
8 hm.put('I', 1);
9 hm.put('V', 5);
10 hm.put('X', 10);
11 hm.put('L', 50);
12 hm.put('C', 100);
13 hm.put('D', 500);
14 hm.put('M', 1000);
15 int res = 0;
16 int temp = 0; // 臨時變量,保存的是當前遍歷的上一個數值的值
17 int value = 0; // 當前羅馬值的大小
18 for(int i = ch.length - 1; i >= 0; i--)
19 {
20 value = hm.get(ch[i]);
21 if(temp <= value) // 左加
22 {
23 res += value;
24 temp = value;
25 }
26 else // 右減
27 {
28 res -= value;
29 temp = value;
30 }
31 }
32 return res;
33 }
34 }
35