Leetcode: Roman to Integer

Given a roman numeral, convert it to an integer.

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

public int romanToInt(String s) {
        // Start typing your Java solution below
        // DO NOT write main() function
        ArrayList<Character> oneLetters = new ArrayList<Character>();
        oneLetters.add('I');
        oneLetters.add('X');
        oneLetters.add('C');
        oneLetters.add('M');
        ArrayList<Character> fiveLetters = new ArrayList<Character>();
        fiveLetters.add('V');
        fiveLetters.add('L');
        fiveLetters.add('D');

        int num=0;
        for(int i=0;i<s.length();i++){
            int bit = fiveLetters.indexOf(s.charAt(i));
            //if the current letter is in fiveLetters
            if(bit!=-1){
                num+=5*(int)Math.pow(10,bit);
            }else{
                bit = oneLetters.indexOf(s.charAt(i));
                //if the current letter is in oneLetters && there is a bigger number afterwards
                if( i+1<s.length() && 
                  (fiveLetters.indexOf(s.charAt(i+1))>=bit ||
                   oneLetters.indexOf(s.charAt(i+1))>bit)){
                    num-=(int)Math.pow(10,bit);
                }
                //else, just add this num
                else{
                    num+=(int)Math.pow(10,bit);
                }
            }

        }
        return num;
    }
FacebookTwitterGoogle+Share

Leave a Reply

Your email address will not be published. Required fields are marked *