Question :
Given a roman numeral, convert it to an integer.
Input is guaranteed to be within the range from 1 to 3999.
Anwser 1 :
class Solution {public: int toNum(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) { // Start typing your C/C++ solution below // DO NOT write int main() function int ret = 0; for(int i = 0; i < s.size(); i++){if(i + 1 < s.size()){if(toNum(s[i]) < toNum(s[i+1])) // high num < low num, then minus{ret -= toNum(s[i]);}else{ret += toNum(s[i]);}}else{ret += toNum(s[i]);}}return ret; }};
Anwser 2 :
class Solution {public: int toNum(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) { // Start typing your C/C++ solution below // DO NOT write int main() function int ret = 0; int len = s.size(); int pre = 1001; int cur; for (int i = 0; i < len; ++i) { cur = toNum(s[i]); ret += cur; if (cur > pre) { ret -= 2*pre; // pre already add one time, now minus tow times } pre = cur; } return ret; }};