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; } };
作者:sunboy_2050 发表于2013-4-21 10:40:29 原文链接
阅读:44 评论:0 查看评论