今天继续刷LeetCode,
第13题,将罗马数字转换为整型数。
分析:
罗马数字中有几个标志数,一种简单的办法是通过遍历字符串中的每位,采用switch的方法进行转换,这种方法在遍历中的每一位都要判断,会浪费计算时间,如果采用map的方法,在判断之前就建立罗马数字与整型数之间的映射关系,就能节省很多计算时间了。例外一个问题是罗马数字中的4和9表示方法的不同,如果每次转换的时候要判断的时候要找到下一个数与本次的数之间的大小,这是可以的,但是还是比较麻烦,那么是不是可以从后往前读取呢?这样再比较的时候就简单很多。
问题:
1、尽量采用节约时间的方法;
2、逆向思考,提高可读性
附上代码:
class Solution {
public:
int romanToInt(string s) {
if(s.empty())
return 0;
unordered_map<char,int> map={{'I',1},{'V',5},{'X',10},{'L',50},{'C',100},{'D',500},{'M',1000}};
int value=0;
int res=0;
int tmp=0;
for(int i=s.size()-1;i>=0;i--)
{
value=map[s[i]];
if(tmp>value)
{
res=res-value;
tmp=value;
}
else
{
res=res+value;
tmp=value;
}
}
return res;
}
};