Given a roman numeral, convert it to an integer.
Input is guaranteed to be within the range from 1 to 3999.
[解题思路]
从前往后扫描,用一个临时变量记录分段数字。
- 如果当前比前一个大,说明这一段的值应该是当前这个值减去上一个值。比如IV = 5 – 1
- 否则,将当前值加入到结果中,然后开始下一段记录。比如VI = 5 + 1, II=1+1
1 public static int romanToInt(String s) { 2 // Start typing your Java solution below 3 // DO NOT write main() function 4 int result = 0; 5 if (s == null || s.length() == 0) { 6 return result; 7 } 8 for (int i = 0; i < s.length(); i++) { 9 if (i > 0 && cToI(s.charAt(i)) > cToI(s.charAt(i - 1))) { 10 result += cToI(s.charAt(i)) - cToI(s.charAt(i - 1)) * 2; 11 } else { 12 result += cToI(s.charAt(i)); 13 } 14 } 15 16 return result; 17 } 18 19 private static int cToI(char c) { 20 switch (c) { 21 case 'I': 22 return 1; 23 case 'V': 24 return 5; 25 case 'X': 26 return 10; 27 case 'L': 28 return 50; 29 case 'C': 30 return 100; 31 case 'D': 32 return 500; 33 case 'M': 34 return 1000; 35 default: 36 return 0; 37 } 38 }