【LeetCode】12. Integer to Roman (2 solutions)

Integer to Roman

Given an integer, convert it to a roman numeral.

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

 

逐区间做处理。

解法一:非递归

class Solution {
public:
    string intToRoman(int num) {
        string ret;
        //M<-->1000
        while(num >= 1000)
        {
            ret += 'M';
            num -= 1000;
        }
        //to here, num < 1000
        //CM<-->900
        if(num >= 900)
        {
            ret += "CM";
            num -= 900;
        }
        //to here, num < 900
        //D<-->500
        if(num >= 500)
        {
            ret += 'D';
            num -= 500;
        }
        //to here, num < 500
        if(num >= 400)
        {
            ret += "CD";
            num -= 400;
        }
        //to here, num < 400
        //C<-->100
        while(num >= 100)
        {
            ret += 'C';
            num -= 100;
        }
        //to here, num < 100
        //XC<-->90
        if(num >= 90)
        {
            ret += "XC";
            num -= 90;
        }
        //to here, num < 90
        //L<-->50
        if(num >= 50)
        {
            ret += 'L';
            num -= 50;
        }
        //to here, num < 50
        //XL<-->40
        if(num >= 40)
        {
            ret += "XL";
            num -= 40;
        }
        //to here, num < 40
        //X<-->10
        while(num >= 10)
        {
            ret += 'X';
            num -= 10;
        }
        //to here, num < 10
        //IX<-->9
        if(num >= 9)
        {
            ret += "IX";
            num -= 9;
        }
        //to here, num < 9
        //V<-->5
        if(num >= 5)
        {
            ret += 'V';
            num -= 5;
        }
        //to here, num < 5
        //IV<-->4
        if(num >= 4)
        {
            ret += "IV";
            num -= 4;
        }
        //to here, num < 4
        //I<-->1
        while(num >= 1)
        {
            ret += 'I';
            num -= 1;
        }
        return ret;
    }
};

 

解法二:递归

class Solution {
public:
    string intToRoman(int num) {
        if(num >= 1000)
            return "M" + intToRoman(num-1000);
        else if(num >= 900)
            return "CM" + intToRoman(num-900);
        else if(num >= 500)
            return "D" + intToRoman(num-500);
        else if(num >= 400)
            return "CD" + intToRoman(num-400);
        else if(num >= 100)
            return "C" + intToRoman(num-100);
        else if(num >= 90)
            return "XC" + intToRoman(num-90);
        else if(num >= 50)
            return "L" + intToRoman(num-50);
        else if(num >= 40) 
            return "XL" + intToRoman(num-40);
        else if(num >= 10) 
            return "X" + intToRoman(num-10);
        else if(num >= 9) 
            return "IX" + intToRoman(num-9);
        else if(num >= 5) 
            return "V" + intToRoman(num-5);
        else if(num >= 4) 
            return "IV" + intToRoman(num-4);
        else if(num >= 1) 
            return "I" + intToRoman(num-1);
        else 
            return "";
    }
};

posted @ 2014-12-21 13:21  陆草纯  阅读(291)  评论(0编辑  收藏  举报