zoukankan      html  css  js  c++  java
  • LeetCode(Roman to Integer)

    Given a roman numeral, convert it to an integer.

    Input is guaranteed to be within the range from 1 to 3999.

    I = 1;
    V = 5;
    X = 10;
    L = 50;
    C = 100;
    D = 500;
    M = 1000;

    参考C++:http://www.cnblogs.com/easonliu/p/3654182.html

    • 个位数举例
      Ⅰ,1 】Ⅱ,2】 Ⅲ,3】 Ⅳ,4 】Ⅴ,5 】Ⅵ,6】Ⅶ,7】 Ⅷ,8 】Ⅸ,9 】
    • 十位数举例
      Ⅹ,10】 Ⅺ,11 】Ⅻ,12】 XIII,13】 XIV,14】 XV,15 】XVI,16 】XVII,17 】XVIII,18】 XIX,19】 XX,20】 XXI,21 】XXII,22 】XXIX,29】 XXX,30】 XXXIV,34】 XXXV,35 】XXXIX,39】 XL,40】 L,50 】LI,51】 LV,55】 LX,60】 LXV,65】 LXXX,80】 XC,90 】XCIII,93】 XCV,95 】XCVIII,98】 XCIX,99 】
    • 百位数举例
      C,100】 CC,200 】CCC,300 】CD,400】 D,500 】DC,600 】DCC,700】 DCCC,800 】CM,900】 CMXCIX,999】
    • 千位数举例
      M,1000】 MC,1100 】MCD,1400 】MD,1500 】MDC,1600 】MDCLXVI,1666】 MDCCCLXXXVIII,1888 】MDCCCXCIX,1899 】MCM,1900 】MCMLXXVI,1976】 MCMLXXXIV,1984】 MCMXC,1990 】MM,2000 】MMMCMXCIX,3999】

     解释一下罗马计算的规律。当下一个的值大于前一个的值,就减去前一个值。如CD=500-100=400。

    如下代码是我自己编写的,但是因为算法太大,导致Time Limit Exceeded。不过还是先记录下这个繁重的算法。

     1 public class Solution {
     2     public int romanToInt(String s) {
     3         //String []value={"I","V","X","L","C","D","M"};
     4         char []value={'I','V','X','L','C','D','M'};
     5         int []a ={1,5,10,50,100,500,1000};
     6         int num=0;
     7         for(int i=0;i<s.length();i++){
     8             for(int j=0;j<value.length;j++){
     9                 if(s.charAt(i)==value[j]){
    10                     if(i+1<s.length()){    
    11                         for(int k=0;k<value.length;k++){
    12                                 if(s.charAt(i+1)==value[k]){
    13                                     if(a[j]<a[k])
    14                                     //比较的是整型int值,而不是字符的大小,因而要转换
    15                                     //if(s.charAt(i)<s.charAt(i+1)){
    16                                         num=num-a[j];//当后一个的值大于前一个值,减去前一个值
    17                                     else
    18                                     num=num+a[j];
    19                                 }
    20                         }
    21                     }else
    22                         num=num+a[j];
    23                 }
    24                 
    25             }
    26             
    27         }
    28         System.out.println(num);
    29         return num;
    30     }
    31 }

     大神写出的高效率代码,先贴出来。如下:

     1 public class Solution {
     2     public int get(char c) {
     3             char dict[] = {'I', 'V', 'X', 'L', 'C', 'D', 'M'};
     4             int value[] = {1, 5, 10, 50, 100, 500, 1000};
     5             int index = 0;
     6             for (; index < dict.length; index++) {
     7                 if (dict[index] == c)
     8                     break;
     9             }
    10             return value[index];
    11     }
    12     public int romanToInt(String s) {
    13         int ret = 0;
    14         for (int i = 0; i < s.length(); i++) {
    15             char c = s.charAt(i);
    16             int value = get(c);
    17             if (i+1 < s.length()) {
    18                 int next = get(s.charAt(i+1));
    19                 if (value < next)
    20                     ret -= value;
    21                 else
    22                     ret += value;
    23             } else {
    24                 ret += value;
    25             }    
    26         }
    27         return ret;
    28     }
    29 }
  • 相关阅读:
    JAVA常见面试题之Forward和Redirect的区别
    [转载]vm文件
    [转载]vm文件
    [转载]心灵丨愿你早一点发现,你才是自己最重要的粉丝
    [转载]心灵丨愿你早一点发现,你才是自己最重要的粉丝
    iBatis整理——Spring环境下批处理实现
    iBatis整理——Spring环境下批处理实现
    SAP HANA 三大特点
    在解决方案中搜索 文件的位置
    我这边测了一下,发现#后面参数变化浏览器不会刷新,但是#一旦去掉就会刷新了,你那边的url拼的时候能不能在没参数的时候#也拼在里面,这样应该就OK了
  • 原文地址:https://www.cnblogs.com/anylemons/p/6476724.html
Copyright © 2011-2022 走看看