编程(罗马数)
代码
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

浙公网安备 33010602011771号