题目链接 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/

本文介绍了一种将罗马数字转换为整数的算法实现,通过使用map存储罗马数字与整数的对应关系,结合特殊情况处理,实现了高效准确的转换。提供了一种简洁的case语句写法,比传统方法速度更快。

被折叠的 条评论
为什么被折叠?



