Roman to Integer
Given a roman numeral, convert it to an integer.
Input is guaranteed to be within the range from 1 to 3999.
SOLUTION 1:
思路:
从后往前遍历罗马数字,如果某个数比前一个数小,则把该数在结果中减掉;
反之,则在结果中加上当前这个数;
1 package Algorithms.string; 2 3 public class RomanToInt { 4 public int romanToInt(String s) { 5 if (s == null) { 6 return 0; 7 } 8 9 int len = s.length(); 10 int sum = 0; 11 int pre = 0; 12 13 for (int i = len - 1; i >= 0; i--) { 14 int cur = romanTable(s.charAt(i)); 15 16 if (i == len - 1) { 17 // 如果是在尾部,直接加上当前值 18 sum += cur; 19 } else { 20 // 判定当前值是不是比前一个值要小,如果小,则需要减去它 21 if (cur < pre) { 22 sum -= cur; 23 } else { 24 sum += cur; 25 } 26 } 27 pre = cur; 28 } 29 30 return sum; 31 } 32 33 public int romanTable(char c) { 34 int num = 0; 35 switch(c) { 36 case 'I': 37 num = 1; 38 break; 39 case 'V': 40 num = 5; 41 break; 42 case 'X': 43 num = 10; 44 break; 45 case 'L': 46 num = 50; 47 break; 48 case 'C': 49 num = 100; 50 break; 51 case 'D': 52 num = 500; 53 break; 54 case 'M': 55 num = 1000; 56 break; 57 default: 58 num = 0; 59 break; 60 } 61 62 return num; 63 } 64 }