13. Roman to Integer
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; }}; |
浙公网安备 33010602011771号