[LeetCode] NO.13 Roman to Integer

[题目] 

Given a roman numeral, convert it to an integer.

Input is guaranteed to be within the range from 1 to 3999.

 

[题目解析] 这道题很关键的是要理解罗马数字的几个主要的代表符号和表示方式,罗马数字共有七个,即I(1),V(5),X(10),L(50),C(100),D(500),M(1000)

用来表示数字的时候,如果相邻的两个罗马数字,前面表示的数字比后面的小,那么就要减去前面的这个数的值。其他情况都是要累加的。为方便理解,可以参考对照表,如下链接

http://wenku.baidu.com/link?url=K_3-gJahQif18LCEkbbJR8cfYNXZFq3CUYUozuaTNV9q5VQO4TNtFn1u4nqbr3MU5OedPG2BhrmBVw8cyjmZhS1NX64wJ6S105pL7bzJO9S

   public int romanToInt(String s) {
        char[] c = s.toCharArray();
        int sum = 0;
        for (int i = 0; i < c.length; i++) {
            int val = getSymbolValue(c[i]);
            if ((i + 1) < c.length && val < getSymbolValue(c[i+1])) {
                sum -= val;
            } else {
                sum += val;
            }
        }
        return sum;
    }
    
    public int getSymbolValue(char c) {
        switch (c) {
            case 'I': return 1;
            case 'V': return 5;
            case 'X': return 10;
            case 'L': return 50;
            case 'C': return 100;
            case 'D': return 500;
            case 'M': return 1000;            
        }
        return -1;
    }

 

posted @ 2016-08-18 22:27  三刀  阅读(91)  评论(0编辑  收藏  举报