Given a roman numeral, convert it to an integer.
Input is guaranteed to be within the range from 1 to 3999.
分析
从前往后扫描,因为左减数字只能最多一位,并且比当前数字小,所以扫描的时候不断判断当前罗马字符和上一个的大小,如果s[i-1] < s[i],那么就加上 s[i] - s[i - 1],其他情况,加上 s[i]。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | class Solution { public : inline int map( const char c) { switch (c) { case 'I' : return 1; case 'V' : return 5; case 'X' : return 10; case 'L' : return 50; case 'C' : return 100; case 'D' : return 500; case 'M' : return 1000; default : return 0; } } int romanToInt(string s) { int len = s.size(); if (len == 0) return 0; int result = 0; for ( int i = 0; i < len; ++i){ if (i > 0 && map(s[i]) > map(s[i - 1])){ result += map(s[i]) - 2 * map(s[i - 1]); } else { result += map(s[i]); } } return result; } }; |