编程(罗马数)

代码

class Solution {
public:
    int romanToInt(string s)
    {
        map<char, int>romeMap;
        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<索引数据类型,值数据类型>名称;

​ 如:map<char,int>romeMap;

2.赋值:

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

3.插入:

​ 如:romeMap.insert(pair<char,int>('I',1));

4.取对应索引的值:

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

双目运算符

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

​ 如:a = a + 5

​ a += 5

posted @ 2022-03-14 11:01  DDBBD  阅读(60)  评论(0)    收藏  举报