题目链接 13. 罗马数字转整数
解题思路
算是一种模拟吧,分很多情况,可以用case语句,或者用map先把对应的罗马数字存下来。
程序代码
class Solution {
public:
int romanToInt(string s) {
map< string ,int> m;
m["I"]=1;m["V"]=5;m["X"]=10;m["L"]=50;m["C"]=100;
m["D"]=500;m["M"]=1000;m["IV"]=3;m["IX"]=8;m["XL"]=30;
m["XC"]=80;m["CD"]=300;m["CM"]=800;
//这里将XC本来的90存为80,是因为下面的操作会先将c对应的10加入,这样就多加了。
int r=m[s.substr(0,1)];
for(int i=1;i<s.size();++i) {
string two=s.substr(i-1,2);
string one=s.substr(i,1);
r+=m[two] ? m[two] : m[one];
//两个字符存在的情况下有限两个字符的
}
return r;
}
};
推荐一种写法(用case语句写的,挺简洁,比上面的速度要快些)
https://leetcode-cn.com/problems/roman-to-integer/solution/yong-cjie-jue-luo-ma-shu-zi-zhuan-huan-zheng-shu-w/