Appearance
13-罗马数字转整数
这道题是看了一个别人的思路按照思路实现出来了 就是按照一个一般情况和特殊情况的处理,六种特殊情况都是在遇到两个字母的时候出现的,所以看到可以减少后面数字大小的就进行额外判断,满足条件则就是在结果上减去对应的数值,如果是遇到正常的数字就正常的加和起来,最终的数字就会产生了直接返回。
代码如下
java
class Solution {
public int romanToInt(String s) {
HashMap<Character,Integer> mymap = new HashMap<>();
/* 使用hashmap快速查询数字对应的整数 */
mymap.put('I',1);
mymap.put('V',5);
mymap.put('X',10);
mymap.put('L',50);
mymap.put('C',100);
mymap.put('D',500);
mymap.put('M',1000);
char[] arr = s.toCharArray();
int len = arr.length;
int ans = 0;
for(int i = 0;i < len ;i++){
/* 三种特殊情况处理 */
if(i+1 < len && arr[i] == 'I' && (arr[i+1] == 'V' || arr[i+1] == 'X') ){
ans += -(mymap.get(arr[i]));
}else if(i+1 < len && arr[i] == 'X' && (arr[i+1] == 'L' || arr[i+1] == 'C')){
ans += -(mymap.get(arr[i]));
}else if(i+1 < len && arr[i] == 'C' && (arr[i+1] == 'D' || arr[i+1] == 'M')){
ans += -(mymap.get(arr[i]));
}else{
/* 一般情况处理 */
ans += mymap.get(arr[i]);
}
}
return ans;
}
}
官方题解
这个题目算和官方的解法思路一致没啥可说的了