问题
如题,除了六个特例,罗马数字都是大数在小数前面。
算法:直接遍历
刚开始想到去解析字符串,于是这道题easy做成了mid…
其实根本没有算法,用常识就可以做,很简单的遍历累加,只需要特判一下后一个字母是否大于当前字母即可
所以学多了算法容易把问题想复杂… 还是得一步步来,遇到没见过的题,先考虑最简单的做法吧。。
时间复杂度
$O(N)$
代码
class Solution {
public:
int romanToInt(string s) {
unordered_map<char, int> st = {{'I', 1}, {'V', 5}, {'X', 10},{'L', 50}, {'C',100}, {'D',500}, {'M',1000}};
int ans = 0;
for(int i = 0; i < s.size(); i ++){
if(i != s.size()-1 && st[s[i]] < st[s[i+1]]){
ans -= st[s[i]];
}else{
ans += st[s[i]];
}
}
return ans;
}
};