2014年5月13日星期二

Loop Solution - Integer to Roman

The idea is to loop by dividing the target number. Notice that 4 and 9 cases, which are different from regular cases. And if processed as 9, the next number is also different, which skip 5 cases.

Just be careful and calmed. Resolve it level by level until reach target to be 0 as target % 1.

public class Solution {
    public String intToRoman(int num) {
        if(!(num >= 1 || num < 4000)){
            return null;
        }
        StringBuilder res = new StringBuilder();
        while(num > 0){
            if(num >= 1000){
                int dividing = num / 1000;
                num = num % 1000;
                for(int i = 0; i < dividing; i++){
                    res.append("M");
                }
            }else if(num >= 500){
                if(num >= 900){
                    res.append("CM");
                    num = num % 100;
                }else{
                    res.append("D");
                    num = num % 500;
                }
            }else if(num >= 100){
                if(num >= 400){
                    res.append("CD");
                }else{
                    int dividing = num / 100;
                    for(int i = 0; i < dividing; i++){
                        res.append("C");
                    }
                }
                num = num % 100;
            }else if(num >= 50){
                if(num >= 90){
                    res.append("XC");
                    num = num % 10;
                }else{
                    res.append("L");
                    num = num % 50;
                }
            }else if(num >= 10){
                if(num >= 40){
                    res.append("XL");
                }else{
                    int dividing = num / 10;
                    for(int i = 0; i < dividing; i++){
                        res.append("X");
                    }
                }
                num = num % 10;
            }else if(num >= 5){
                if(num == 9){
                    res.append("IX");
                    num = num % 1;
                }else{
                    res.append("V");
                    num = num % 5;
                }
            }else if(num > 0){
                if(num == 4){
                    res.append("IV");
                }else{
                    for(int i = 0; i < num; i++){
                        res.append("I");
                    }
                }
                num = num % 1;
            }
        }
        return res.toString();
    }
}

没有评论: