题目链接
题目大意
题目说得很明白了,这里不再赘述。
解题思路
这里使用了映射每个字符的方法,利用 map 将不同的罗马字符映射到相应的阿拉伯数字。
对于给定的罗马数字,首先从当前位置向前看两个字符,如果这两个字符可以组成单独的罗马数字,就处理掉,同时当前位置加一;如果当前位置向前两个字符不能组成单独的罗马数字,就只处理当前位置的罗马数字即可。
参考代码如下。
class Solution {
public:
int romanToInt(string s) {
map <string, int> roman{{"I", 1}, {"IV", 4}, {"V", 5}, {"IX", 9}, {"X", 10}, {"XL", 40}, \
{"L", 50}, {"XC", 90}, {"C", 100}, {"CD", 400}, {"D", 500}, {"CM", 900}, {"M", 1000}};
int ans = 0;
for (int i = 0; i < s.size(); i++) {
string temp = s.substr(i, 2);
if (roman[temp]) {
ans += roman[temp];
i++;
}
else
ans += roman[temp.substr(0, 1)];
}
return ans;
}
};
解题感悟
国庆浪了七天,好多作业都没写完,感觉清华的课程真的好硬啊。
今天才有时间继续我的刷题大业,先把昨天的题补上。加油。