LeetCode(12) - Integer to Roman

  本题的要求是把阿拉伯数字转化成罗马数字,这题唯一的难点,可能就是要了解罗马数字的规则,了解了以后,就没什么难的了。因为罗马数字的规则相对比较复杂,如果想要查看罗马数字的规则,网上有很多资料可以查询。剩下的就是简单的逻辑问题了。做这道题有两个方法,一个是建一个罗马数字初始数组,通过不断调用该数组来构成罗马数字。第二种就是通过不断的判断来完成。这两种方法,第一种较快,但需要一些额外的空间,第二种因为有较多的判断,所以速度要稍稍慢一些,但影响并不大。

  代码如下:

  不建立数组的方法:

 1 public class Solution {
 2     public String intToRoman(int num) {
 3         StringBuilder sb = new StringBuilder();
 4         while (num > 0) {
 5             int value = getRoman(num, sb);
 6             num -= value;
 7         }
 8         return sb.toString();
 9     }
10     
11     private int getRoman(int num, StringBuilder sb) {
12         if (num >= 1000) {
13             sb.append('M');
14             return 1000;
15         }
16         else if (num >= 900) {
17             sb.append('C');
18             return -100;
19         }
20         else if (num >= 500) {
21             sb.append('D');
22             return 500;
23         }
24         else if (num >= 400) {
25             sb.append('C');
26             return -100;
27         }
28         else if (num >= 100) {
29             sb.append('C');
30             return 100;
31         }
32         else if (num >= 90) {
33             sb.append('X');
34             return -10;
35         }
36         else if (num >= 50) {
37             sb.append('L');
38             return 50;
39         }
40         else if (num >= 40) {
41             sb.append('X');
42             return -10;
43         }
44         else if (num >= 10) {
45             sb.append('X');
46             return 10;
47         }
48         else if (num >= 9) {
49             sb.append('I');
50             return -1;
51         }
52         else if (num >= 5) {
53             sb.append('V');
54             return 5;
55         }
56         else if (num >= 4){
57             sb.append('I');
58             return -1;
59         }
60         else {
61             sb.append('I');
62             return 1;
63         }
64     }
65 }

  建立数组的方法:

 1 public class Solution { 
 2     public String intToRoman(int num) {
 3         int[] values = {1000,900,500,400,100,90,50,40,10,9,5,4,1};
 4         String[] strs = {"M","CM","D","CD","C","XC","L","XL","X","IX","V","IV","I"};
 5         StringBuilder sb = new StringBuilder();
 6         for(int i=0;i<values.length;i++) {
 7             while(num >= values[i]) {
 8                 num -= values[i];
 9                 sb.append(strs[i]);
10             }
11         }
12         return sb.toString();
13     }
14 }
原文地址:https://www.cnblogs.com/kepuCS/p/5241628.html