题目详情

Given a roman numeral, convert it to an integer.
Input is guaranteed to be within the range from 1 to 3999.

输入一个字符串形式的罗马数字,我们需要将它转换为阿拉伯数字表示的整数。其中输入的数字在1到3999的范围内。

想法

  • 这道题我不太熟悉的地方在于罗马数字和阿拉伯数字之间的转换规律。
  • 首先不同的字符代表不同的数,例如‘I’ = 1,'V' = 5,'X' = 10 等等。
  • 如果代表较小数的字符出现在较大数的左侧,那么应该减去这个左边的数应该是被减去的。

解法

    public int romanToInt(String s) {
        HashMap<Character,Integer> count = new HashMap<Character,Integer>();
        int res = 0;
        insertMap(count);
        for(int i=0;i<s.length()-1;i++){
            if(count.get(s.charAt(i)) < count.get(s.charAt(i+1))){
                res = res - count.get(s.charAt(i));
            }else{
                res = res + count.get(s.charAt(i));
            }
        }
        res = res + count.get(s.charAt(s.length()-1));

        return res;
    }
    public HashMap<Character,Integer> insertMap(HashMap<Character,Integer> count){
        count.put('I', 1);
        count.put('V', 5);
        count.put('X', 10);
        count.put('L', 50);
        count.put('C', 100);
        count.put('D', 500);
        count.put('M', 1000);
        return count;
    }

soleil阿璐
350 声望45 粉丝

stay real ~