您的位置:首页 > 其它

12. Integer to Roman

2016-06-18 16:04 253 查看
题目:

Given an integer, convert it to a roman numeral.

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

题意:

给定一个整数,将其转换为罗马数字。输入的数字可以保证在1到3999范围内。

思路一:

罗马数字规则:

1, 罗马数字共有7个,即I(1)、V(5)、X(10)、L(50)、C(100)、D(500)和M(1000)。

罗马数字中没有“0”。

2, 重复次数:一个罗马数字最多重复3次。

3, 右加左减:

在较大的罗马数字的右边记上较小的罗马数字,表示大数字加小数字。

在较大的罗马数字的左边记上较小的罗马数字,表示大数字减小数字。

4, 左减的数字有限制,仅限于I、X、C,且放在大数的左边只能用一个。

(*) V 和 X 左边的小数字只能用Ⅰ。

(*) L 和 C 左边的小数字只能用X。

(*) D 和 M 左 边的小数字只能用C。

题目所知,最大整数为3999,所以将整数按照千位,百位,十位,个位分离出来之后单独转换,之后拼接到一起。

代码:10ms

public class Solution {
    public String intToRoman(int num) {
        String M[] = {"", "M", "MM", "MMM"};
        String C[] = {"", "C", "CC", "CCC", "CD", "D", "DC", "DCC", "DCCC", "CM"};
        String X[] = {"", "X", "XX", "XXX", "XL", "L", "LX", "LXX", "LXXX", "XC"};
        String I[] = {"", "I", "II", "III", "IV", "V", "VI", "VII", "VIII", "IX"};
        return M[num/1000] + C[(num%1000)/100] + X[(num%100)/10] + I[num%10];
    }
}

思路二:

将整数分等级相比,如果大于就多拼一个罗马字符。

代码:36ms

class Solution {
public:
    string intToRoman(int num) {
        string str;
        string symble[] = {"M","CM","D","CD","C","XC","L","XL","X","IX","V","IV","I"};
        int value[]  =    {1000,900,500,400, 100, 90,  50, 40,  10, 9,   5,  4,   1};
        for(int i=0; num!=0; ++i){
            while(num>=value[i]){
                num -= value[i];
                str += symble[i];
            }
        }
        return str;
    }
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: