Leetcode13--->罗马数字转换为整数
该算法是将罗马数字转换为整数,思路如下:比如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