LeetCode:12. Integer to Roman(Medium)

1. 原题链接

https://leetcode.com/problems/integer-to-roman/description/

2. 题目要求

(1) 将整数转换成罗马数字; (2) 整数的范围1-3999

3. 关于罗马数字

  (1)对应整数

罗马数字 I V X L C D M
对应整数 1 5 10 50 100 500 1000

 

 

 

(2)罗马数字的书写规则

  • 相同的数字连写, 所表示的数等于这些数字相加得到的数。如 XXX表示 30
  • 小的数字在大的数字的右边, 所表示的数等于这些数字相加得到的数 如VIII 表示8
  • 小的数字(限于I, X, C)在大的数字的左边, 所表示的数等于大数减去小的数: 如IV 表示4
  • 在一个数的上面画一条横线, 表示这个数增值1000倍(由于题目只考虑4000以内的数,所以这条规则不用考虑)。

(3)罗马数字的组合规则

  • I, X, C: 最多只能连用3个, 如果放在大数的左边,只能用1个。
  • V, L, D: 不能放在大数的左边,只能使用一个。
  • I 只能用在V和X的左边。 IV表示4, IX表示9
  • X只能放在L,C左边。 XL 表示40, XC表示90
  • C放在左边时只能用在D, M左边。 CD 表示400, CM表示900

4. 解题思路

(1)找出所给整数每一位上对应的罗马数字。例如给出整数2307,千位上为2,2000对应罗马数字MM;百位上为3,300对应罗马数字CCC;个位上为7,7对应的罗马数字为VII,故可的2307对应的罗马数字为MMCCCVII。

(2)于是我们要列出不同位上、不同数字对应的罗马数字:

千位上的数字 0 1 2 3
对应罗马数字   M MM MMM

  

 

 

百位上的数字 0 1 2 3 4 5 6 7 8 9
对应罗马数字   C CC CCC CD D DC DCC DCCC CM

 

 

 

十位上的数字 0 1 2 3 4 5 6 7 8 9
对应罗马数字   X XX XXX XL L LX LXX LXXX XC

 

 

 

个位上的数字 0 1 2 3 4 5 6 7 8 9
对应罗马数字   I II III IV V VI VII VIII IX

 

 

 

5. 代码实现

 1 package com.huiAlex;
 2 
 3 public class IntegerToRoman12 {
 4     public static void main(String[] args) {
 5         System.out.println(IntegerToRoman12.intToRoman(999));
 6     }
 7     public static String intToRoman(int num) {
 8         String M[] = {"", "M", "MM", "MMM"};  // 千位上对应的罗马数字
 9         String C[] = {"", "C", "CC", "CCC", "CD", "D", "DC", "DCC", "DCCC", "CM"};  // 百位上对应的罗马数字
10         String X[] = {"", "X", "XX", "XXX", "XL", "L", "LX", "LXX", "LXXX", "XC"};  // 十位上对应的罗马数字
11         String I[] = {"", "I", "II", "III", "IV", "V", "VI", "VII", "VIII", "IX"};  // 个位上对应的罗马数字
12         
13         return M[num/1000] + C[(num%1000)/100] + X[(num%100)/10] + I[num%10];
14     }
15 }

 

posted @ 2017-12-19 11:06  一只敲码的猫  阅读(278)  评论(0编辑  收藏  举报