2013.12.1 23:16
Given a roman numeral, convert it to an integer.
Input is guaranteed to be within the range from 1 to 3999.
Solution:
Given a Roman number, convert it to normal arabian form. Just do the conversion from left to right, one digit by one.
Here is the wiki if you need background knowledge about Roman numerals:
http://en.wikipedia.org/wiki/Roman_numerals
Time complexity is O(n), where n is the length of the given Roman string. Space complexity is O(1), actually 128.
Accepted code:
1 class Solution { 2 public: 3 int romanToInt(string s) { 4 // IMPORTANT: Please reset any member data you declared, as 5 // the same Solution instance will be reused for each test case. 6 int i, len; 7 int res; 8 9 b['I'] = 1; 10 b['V'] = 5; 11 b['X'] = 10; 12 b['L'] = 50; 13 b['C'] = 100; 14 b['D'] = 500; 15 b['M'] = 1000; 16 17 res = 0; 18 i = 0; 19 len = s.length(); 20 while(i < len){ 21 if(i < len - 1){ 22 if(b[s[i]] < b[s[i + 1]]){ 23 res += b[s[i + 1]] - b[s[i]]; 24 i += 2; 25 }else{ 26 res += b[s[i]]; 27 ++i; 28 } 29 }else{ 30 res += b[s[i]]; 31 ++i; 32 } 33 } 34 35 return res; 36 } 37 private: 38 int b[128]; 39 };