题目: 罗马数字转整数

来自智得网
跳转至: 导航、​ 搜索

分析

罗马数字的排列有两种情况,在遍历字符串的过程中,需要分区该两种情况:

罗马数字一般情况下代表大数字的字符在字符串的左侧,而小数字字符在字符串的右侧,在此种情况下,字符表示的数字进行相加操作。

而在特殊情况下,小数字在大数字的左侧,此时代表的数字是右侧的数字减去左侧的数字。

为了更加高效的进行转换,可以提前将字符代表的十进制数据进行存储,因为是KV转换,所以采用Map方式存储字符对应的十进制数字。

题解

import java.util.HashMap;
import java.util.Map;

public class Solution {
    public static int solute(String s) {
        Map<Character, Integer> convertMap = new HashMap<>();
        convertMap.put('I', 1);
        convertMap.put('V', 5);
        convertMap.put('X', 10);
        convertMap.put('L', 50);
        convertMap.put('C', 100);
        convertMap.put('D', 500);
        convertMap.put('M', 1000);
        int result = 0;
        for (int i = 0; i < s.length(); i++) {
            if(i != s.length() - 1 && 
                    convertMap.get(s.charAt(i)) < convertMap.get(s.charAt(i + 1))) {
                result -= convertMap.get(s.charAt(i));
            }
            else {
                result += convertMap.get(s.charAt(i));
            }
        }

        return result;
    }
}