#13 Roman to Integer

這題要考的是對規則的理解、以及對字串的處理。

Concept:

首先,羅馬數字共有7個 - Ⅰ(1)、Ⅴ(5)、Ⅹ(10)、Ⅼ(50)、Ⅽ(100)、Ⅾ(500)和Ⅿ(1000)。所有數字都是由這7個構成的。

兩個相鄰的羅馬數字,若右邊的比左邊的大,代表右邊減掉左邊的阿拉伯數字。

e.g. IV -> 4

讀進s之後,先將s的每個char都對應到阿拉伯數字,

存入char[] num,

再依序讀num,若num[i]<num[i-1],表示num[i]要被減掉,反之,要加上去。

完整程式碼:

public class Solution {
    public int romanToInt(String s) {
        //1 ~ 10 : I, II, III, IV, V, VI, VII, VIII, IX, X
        //20 ~ 100: XX XXX XL L LX LXX LXXX XC C
        //200~900 : CC CCC CD D DC DCC DCCC CM
        //1000 : M

        //declare an integer ans=0 to save answer
        //declare an int array num, size = s.length(), to save conversion of each character
        //for loop through s, use switch statements to convert roman to decimal. save decimal number of each character in num
        //for loop through num, if num[i]>=num[i+1], ans+=num[i], else ans -= num[i]

        int ans =0;
        int[] num = new int[s.length()];

        for(int i=0; i<s.length(); i++){
            char c = s.charAt(i);
            switch(c){
                case 'I':
                    num[i] = 1;
                    break;
                case 'V':
                    num[i] = 5;
                    break;
                case 'X':
                    num[i] = 10;
                    break;
                case 'L':
                    num[i] = 50;
                    break;
                case 'C':
                    num[i] = 100;
                    break;
                case 'D':
                    num[i] = 500;
                    break;
                case 'M':
                    num[i] = 1000;
                    break;
            }
        }
        for(int j=0; j<num.length-1; j++){
            if(num[j] >= num[j+1])
                ans += num[j];
            else
                ans -= num[j];
        }
        ans += num[num.length-1];
        return ans;
    }
}

results matching ""

    No results matching ""