leetcode_13_Roman to Integer(C++)(easy)

Given a roman numeral, convert it to an integer.

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

思路一:

首先观察罗马数字Ⅰ、Ⅱ、Ⅲ、Ⅳ、Ⅴ、Ⅵ、Ⅶ、Ⅷ、Ⅸ、Ⅹ、Ⅺ、Ⅻ(1-12)。对于Ⅳ,当1出现在5的左侧时是4,即做减法。对于Ⅵ,1出现在5右侧是6,做加法。那么对于一个给定的罗马数字,我们可以对其累加,当相邻的两个字符,前一个小于后一个时减去2倍的前一个数(因为本该减1的地方加1了,所以减2倍)。


class Solution {
public:
    int romanToInt(string s) {
        
        if(s == "\0")
            return false;
        int result = 0;
        for(int i = 0; i < s.size(); ++i)
        {
            result += toInt(s[i]);
        }
        
        
        
        for(int i = 1; i < s.size(); ++i)
        {
            int pre = toInt(s[i - 1]);
            int cur = toInt(s[i]);
            if(pre < cur)
            {
                result -= 2 * pre;
            }
            
        }
        return result;
    }
    
    int toInt(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;
        }
    }
};

你可能感兴趣的:(leetcode_13_Roman to Integer(C++)(easy))