zoukankan      html  css  js  c++  java
  • 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 }
  • 相关阅读:
    Java实现 蓝桥杯VIP 算法提高 P0404
    Java实现 蓝桥杯VIP 算法提高 P0404
    Java实现 蓝桥杯VIP 算法提高 P0404
    Java实现 蓝桥杯VIP 算法提高 P0404
    Java实现 蓝桥杯VIP 算法提高 P0404
    Java实现 蓝桥杯VIP 算法训练 排列问题
    Java实现 蓝桥杯VIP 算法训练 排列问题
    Java实现 蓝桥杯VIP 算法训练 排列问题
    Java实现 蓝桥杯VIP 算法训练 排列问题
    关于模态/非模态对话框不响应菜单的UPDATE_COMMAND_UI消息(对对WM_INITMENUPOPUP消息的处理)
  • 原文地址:https://www.cnblogs.com/kepuCS/p/5241628.html
Copyright © 2011-2022 走看看