leetcode 12. Integer to Roman

来源:互联网 发布:金兰营销软件 编辑:程序博客网 时间:2024/06/04 23:36

Given an integer, convert it to a roman numeral.

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

将十进制数字转化为罗马数字。这又要温习一下罗马数字了:

基本字符

I
V
X
L
C
D
M
相应的阿拉伯数字表示为
1
5
10
50
100
500
1000
1. 相同的数字连写、所表示的数等于这些数字相加得到的数、如:Ⅲ=3;
2. 小的数字在大的数字的右边、所表示的数等于这些数字相加得到的数、 如:Ⅷ=8、Ⅻ=12;
3.小的数字(限于 I、X 和 C)在大的数字的左边、所表示的数等于大数减小数得到的数、如:Ⅳ=4、Ⅸ=9;
4. 正常使用时、连写的数字重复不得超过三次;

个位数举例
Ⅰ-1、Ⅱ-2、Ⅲ-3、Ⅳ-4、Ⅴ-5、Ⅵ-6、Ⅶ-7、Ⅷ-8、Ⅸ-9
十位数举例
Ⅹ-10、Ⅺ-11、Ⅻ-12、XIII-13、XIV-14、XV-15、XVI-16、XVII-17、XVIII-18、XIX-19、XX-20、XXI-21、XXII-22、XXIX-29、XXX-30、XXXIV-34、XXXV-35、XXXIX-39、XL-40、L-50、LI-51、LV-55、LX-60、LXV-65、LXXX-80、XC-90、XCIII-93、XCV-95、XCVIII-98、XCIX-99
百位数举例
C-100、CC-200、CCC-300、CD-400、D-500、DC-600、DCC-700、DCCC-800、CM-900、CMXCIX-999
千位数举例
M-1000、MC-1100、MCD-1400、MD-1500、MDC-1600、MDCLXVI-1666、MDCCCLXXXVIII-1888、MDCCCXCIX-1899、MCM-1900、MCMLXXVI-1976、MCMLXXXIV-1984、MCMXC-1990、MM-2000、MMMCMXCIX-3999

思路就是将千位、百位、十位、个位分解开来:

package leetcode;public class Integer_to_Roman_12 {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"};    int qian=num/1000;//千位上的数    int bai=(num%1000)/100;//百位上的数    int shi=(num%100)/10;//十位上的数    int ge=num%10;//个位上的数    String result=M[qian]+C[bai]+X[shi]+I[ge];return result;}public static void main(String[] args) {// TODO Auto-generated method stubInteger_to_Roman_12 i=new Integer_to_Roman_12();System.out.println(i.intToRoman(3999));}}
还有大神这样做,也是很OK的。从大到小排序,遇大填大。
public String intToRoman(int num) {    int[] values = {1000,900,500,400,100,90,50,40,10,9,5,4,1};    String[] strs = {"M","CM","D","CD","C","XC","L","XL","X","IX","V","IV","I"};        StringBuilder sb = new StringBuilder();        for(int i=0;i<values.length;i++) {        while(num >= values[i]) {            num -= values[i];            sb.append(strs[i]);        }    }    return sb.toString();}