解题思路:根据表去建hashmap
代码:
class Solution {
static Map<Character, Integer> map = new HashMap<>();
public int romanToInt(String s) {
if (!map.containsKey('I')) { // 构造映射函数
char[] l = new char[]{'I', 'V', 'X', 'L', 'C', 'D', 'M'};
for (int i = 0, v = 1; i < 7; ++i) {
if ((i&1) == 1) {map.put(l[i], 5 * v); v *= 10;}
else map.put(l[i], v);
}
}
int len = s.length(), ans = map.get(s.charAt(0));
for (int i = 1; i < len; ++i) {
// 当上一个罗马值小于下一个时, 需要减去2倍的上一个值
if (map.get(s.charAt(i - 1)) < map.get(s.charAt(i)))
ans -= 2 * map.get(s.charAt(i - 1));
ans += map.get(s.charAt(i));
}
return ans;
}
}
作者:KJ.JK
本文仅用于交流学习,未经作者允许,禁止转载,更勿做其他用途,违者必究。
文章对你有所帮助的话,欢迎给个赞或者 star,你的支持是对作者最大的鼓励,不足之处可以在评论区多多指正,交流学习