Lexi's Leetcode solutions

[leetcode] Roman to Integer | 罗马数字转换成整数

Posted on: August 14, 2013

看了看别人的答案,他们是利用了罗马数字的概念:从左往右,每次加上当前字母的面值就好了。如果前一个字母面值<后一个字母,说明当前字母是4,9的第二个字符。这个时候就减去两次前一个字母面值(因为前一步已经加一次了,这里发现其实是需要减,所以要减两次)。最后无论如何都要加上当前字母的面值。比如XIV(14),后一个字母是V时,发现>I,但此时result已经是10 + 1了,所以要-2,再+5。

public int romanToInt(String s) {
    Map<Character, Integer> map = new HashMap<Character, Integer>();
    map.put('I', 1);
    map.put('V', 5);
    map.put('X', 10);
    map.put('L', 50);
    map.put('C', 100);
    map.put('D', 500);
    map.put('M', 1000);
    char[] arr = s.toCharArray();
    int res = map.get(arr[0]);
    for (int i = 1; i < arr.length; i++) {
        if (map.get(arr[i]) > map.get(arr[i - 1])) {
            res -= 2 * map.get(arr[i - 1]);
        } 
        res += map.get(arr[i]);
    }
    return res;
}
Tags:

1 Response to "[leetcode] Roman to Integer | 罗马数字转换成整数"

从右往左好计算。如果遇到比前一个更小的值。剪掉。

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s

%d bloggers like this: