Skip to content

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;
    }
}

官方题解

这个题目算和官方的解法思路一致没啥可说的了