• 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 }
  • 相关阅读:
    Ajax实现动态的二级级联菜单
    使用 Struts 2 实现国际化
    使用 Struts2 校验器校验用户注册信息
    Python基础 9.正则
    Python基础 8.迭代器 生成器 包
    Python基础 7.异常
    Python基础 6 .文件操作
    Python基础 5.类
    Python基础 4.函数
    Python基础 3 控制流程
  • 原文地址:https://www.cnblogs.com/kepuCS/p/5241628.html
Copyright © 2020-2023  润新知