LeetCode(12) - Integer to Roman
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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 }
以上是关于LeetCode(12) - Integer to Roman的主要内容,如果未能解决你的问题,请参考以下文章
LeetCode 12 Integer to Roman (整数转罗马数字)
[LeetCode] 12. Integer to Roman ☆☆