Sunday, March 20, 2016

LeetCode 刷题第一阶段 Roman to Integer

Given a roman numeral, convert it to an integer.

================================================================================
做题须知:
【罗马数字】
1~9: {"I", "II", "III", "IV", "V", "VI", "VII", "VIII", "IX"};
10~90: {"X", "XX", "XXX", "XL", "L", "LX", "LXX", "LXXX", "XC"};
100~900: {"C", "CC", "CCC", "CD", "D", "DC", "DCC", "DCCC", "CM"};
1000~3000: {"M", "MM", "MMM"}.

Which means:
I -> 1
V -> 5
X -> 10
L -> 50
C -> 100
D -> 500
M -> 1000

规律: 左减右加。 设一个指针,每次判断它的前一个是不是比它小, 小就从结果里减去。

=======================================================================
Code:
public class Solution {
    public int romanToInt(String s) {
        char [] t = s.toCharArray();
        int cur = 1;
        int res = toNum(t[0]);
        while(cur < s.length()){
            // minus
            if(toNum(t[cur - 1]) < toNum(t[cur])){
                res += toNum(t[cur]) - 2*toNum(t[cur - 1]); 
            } else{
                // plus
                res += toNum(t[cur]) ; 
            }
            cur ++;
        }
        
        return res;
    }
    
    public int toNum(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 0;
    }
}

No comments:

Post a Comment