题目链接:13.罗马数字转整数

题解:

12.整数转罗马数字类似,就是反过来问的!处理稍有不同!

题目简述:

给出罗马数字,转化为普通数字!

例如: “MCMXCIV” ------------> 1994

题解:

同样适用哈希表存储,不过与上一道题反着的,存储类型反着换了一下!

首先从左到右搜索每一位罗马字符,能找到对应的字符就给value进行累加。

  • 应该先按两个进行搜索,因为会出现这种情况"MCMXCIV" ,先按照一个字符搜,遇到CM应该处理为900,但是按照一个字母先走,会变成C + M,就变成了 1100。这是不对的。
  • 先按照两个搜索,然后 i += 2,然后按照一个进行搜索i += 1.

AC代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
class Solution {
public:
int romanToInt(string s) {
unordered_map<string, int> hash;
int value = 0;
hash["I"] = 1;
hash["IV"] = 4;
hash["V"] = 5;
hash["IX"] = 9;
hash["X"] = 10;
hash["XL"] = 40;
hash["L"] = 50;
hash["XC"] = 90;
hash["C"] = 100;
hash["CD"] = 400;
hash["D"] = 500;
hash["CM"] = 900;
hash["M"] = 1000;
for(int i = 0; i < s.size();){
if(hash.count(s.substr(i, 2))) value += hash[s.substr(i, 2)], i += 2;
else if(hash.count(s.substr(i, 1))) value += hash[s.substr(i, 1)], i += 1;
}
return value;
}
};