编程(罗马数)


代码

class Solution {
public:
    int romanToInt(string s)
    {
        mapromeMap;
        romeMap['I']=1;
        romeMap['V']=5;
        romeMap['X']=10;
        romeMap['L']=50;
        romeMap['C']=100;
        romeMap['D']=500;
        romeMap['M']=1000;

        int sum = 0;
        for (int i = s.size() - 1; i >= 0; i--) 
        {
            int a = romeMap[s[i]];
            if (i == 0) 
            {
                sum += a;
            }
            else {
                int b = romeMap[s[i - 1]];
                int flag = a / b;
                if (flag == 5 || flag == 10) 
                {
                    sum = (sum + a - b);
                    i--;
                }
                else 
                {
                    sum +=  a;
                }
            }
        }
        return sum;
    }
};

结果

12MS 8MB
63% 20%

牙白啊牙白......从后向前取字符,每次取两个,满足特殊条件的就特殊处理......就嗯算。

别人的解法真的是好强好巧好聪明。

零碎

map的用法

1.定义:map<索引数据类型,值数据类型>名称;

? 如:mapromeMap;

2.赋值:

? 如:romeMap['I']=1;

3.插入:

? 如:romeMap.insert(pair('I',1));

4.取对应索引的值:

? 如:int a = romeMap['I'];

双目运算符

能显著的加快运行速度,一定要用。

? 如:a = a + 5

? a += 5