码迷,mamicode.com
首页 > 其他好文 > 详细

【LeetCode】Integer to Roman (2 solutions)

时间:2014-12-21 13:58:22      阅读:136      评论:0      收藏:0      [点我收藏+]

标签:

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 "";
    }
};

技术分享

【LeetCode】Integer to Roman (2 solutions)

标签:

原文地址:http://www.cnblogs.com/ganganloveu/p/4176393.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!