罗马数字转整数

描述

给定一个罗马数字,将其转换成整数。
返回的结果要求在1到3999的范围内

样例
IV -> 4
XII -> 12
XXI -> 21
XCIX -> 99
说明

考察点
  • 对于数字的敏感程度
  • 如何寻找规律
答案
public int romanToInt(String s) {
    // Write your code here
    int result = 0;

    char[] num = {'M', 'D', 'C', 'L', 'X', 'V', 'I'};
    int[] nums = {1000, 500, 100, 50, 10, 5, 1, 0, 0};
    int[] lnums = {100, 100, 10, 10, 1, 1, 0, 0};

    for (int i = 0; i < num.length; i++) {
        int left = s.indexOf(num[i]);
        while (left != -1) {
            if (left == 1) {
                result += nums[i] - lnums[i];
            } else {
                result += nums[i];
            }
            s = s.substring(left + 1);
            left = s.indexOf(num[i]);
        }
    }
    return result;
}