前言

Github:https://github.com/HealerJean

博客:http://blog.healerjean.com

1、罗马数字转整数

罗马数字包含以下七种字符: IVXLCDM

2 写做 II ,即为两个并列的 1。

12 写做 XII ,即为 X + II

27 写做 ` XXVII, 即为 XX + V + II`。

字符          数值
I             1
V             5
X             10
L             50
C             100
D             500
M             1000

通常情况下,罗马数字中小的数字在大的数字的右边 但也存在特例,

I 可以放在 V (5)  X (10) 的左边来表示 4  9
X 可以放在 L (50)  C (100) 的左边来表示 40  90。 
C 可以放在 D (500)  M (1000) 的左边来表示 400  900

示例 1:

输入: "III"
输出: 3

示例 2:

输入: "IV"
输出: 4

示例 3:

输入: "IX"
输出: 9

示例 4:

输入: "LVIII"
输出: 58
解释: L = 50, V= 5, III = 3.

示例 5:

输入: "MCMXCIV"
输出: 1994
解释: M = 1000, CM = 900, XC = 90, IV = 4.

1.1、解题思路

同 27_整数转罗马数字

1.2、算法



public int romanToInt(String s) {
    int[] nums = {1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1};
    String[] romans = {"M", "CM", "D", "CD", "C", "XC", "L", "XL", "X", "IX", "V", "IV", "I"};
    int length = nums.length;
    int index = 0;
    int num = 0 ;
    while (index < length) {
        // 这里是等号,这样就保证了那种特殊的数字
        while (s.startsWith(romans[index])) {
            num = num + nums[index] ;
            //截取除匹配字符串后面的
            s =  s.substring(s.indexOf(romans[index])+ romans[index].length());
        }
        index++;
    }
    return  num;

}

1.3、测试

@Test
public void test(){
    System.out.println(romanToInt("MCMXCIV"));
}

1994

ContactAuthor