Leetcode: Roman to Integer

来源:互联网 发布:海岛奇兵火坦升级数据 编辑:程序博客网 时间:2024/06/05 02:53

Given a roman numeral, convert it to an integer.

Input is guaranteed to be within the range from 1 to 3999.

顺序扫描,注意IV这种情况。

class Solution {public:    int romanToInt(string s) {        int result = 0;        int tmp1 = 0, tmp2 = 0;        int size = s.size();        for (int i = 0; i < size; ++i) {            tmp1 = getRomanValue(s[i]);            if (i + 1 < size) {                tmp2 = getRomanValue(s[i+1]);                if (tmp2 > tmp1) {                    tmp2 -= tmp1;                    result += tmp2;                    ++i;                }                else {                    result += tmp1;                }            }            else {                result += tmp1;            }        }                return result;    }        int getRomanValue(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;          }      }  };
简单一些的方案,先加上去,再减。

class Solution {public:    int romanToInt(string s) {        int result = 0;        int prev = 0, cur = 0;        for (int i = 0; i < s.size(); ++i) {            cur = getRomanValue(s[i]);            result += cur;            if (cur > prev) {                result -= prev + prev;            }            prev = cur;        }                return result;    }        int getRomanValue(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;          }      }  };

0 0