zoukankan      html  css  js  c++  java
  • 【LeetCode】012 013 Roman Integer

    题目:罗马数字string和自然整数的N相互转换,范围在1-3999之间

    只知道10以下的罗马数字的规则,没办法赶紧去百度了一下。没办法看了一会才看懂,幸好只是要求在4000以下。

    http://baike.baidu.com/link?url=f5H-LirOQteTWmhQXoghRvl9f8aJlm4sHDVvTzY87XaDiiN06GasOCuETJf3mb4V4KgIubN-Ad7-atNDz4RXJK

    整数

    1

    5

    10

    50

    100

    500

    1000

    罗马数

    I

    V

    X

    L

    C

    D

    M

    规则:

    1、相同的数字连写,所表示的数等于这些数字相加得到的数,如:Ⅲ = 3;

    2、小的数字在大的数字的右边,所表示的数等于这些数字相加得到的数, 如:Ⅷ = 8;

    3、小的数字,(限于Ⅰ、X 和C)在大的数字的左边,所表示的数等于大数减小数得到的数,如:Ⅳ= 4;Ⅸ= 9;

    4、正常使用时,连写的数字重复不得超过三次。(表盘上的四点钟“IIII”例外)

    5、在一个数的上面画一条横线,表示这个数扩大1000倍。


    先做的将整数转换成罗马数字,只是将N拆成1000,900,500,400,100,90,50,40,10,9,5,4,1这样的组合即可。

    罗马数字转换成整数的时候,也是需要从string中不断的读取字符分情况判断。

    代码如下:写法很脑残,等有时间看看别人的代码。

     1 class Solution {
     2 public:
     3     string intToRoman(int num) {
     4         string ans = "";
     5         int base = 1000, n, res;
     6         // 千位
     7         n = num/base; res = num%base; num = res; base/=10;
     8         while(n--) ans += "M";
     9 
    10         // 百位
    11         n = num/base; res = num%base; num = res; base/=10;
    12         if(n==9) ans += "CM";
    13         else if(n>=5)
    14         {
    15             ans += "D";
    16             while(n!=5)
    17             {
    18                 ans += "C";
    19                 n--;
    20             }
    21         }
    22         else if(n==4) ans += "CD";
    23         else
    24         {
    25             while(n--) ans += "C";
    26         }
    27 
    28         // 十位
    29         n = num/base; res = num%base; num = res; base/=10;
    30         if(n==9) ans += "XC";
    31         else if(n>=5)
    32         {
    33             ans += "L";
    34             while(n!=5)
    35             {
    36                 ans += "X";
    37                 n--;
    38             }
    39         }
    40         else if(n==4) ans += "XL";
    41         else
    42         {
    43             while(n--) ans += "X";
    44         }
    45 
    46         // 个位
    47         n = num;
    48         if(n==9) ans += "IX";
    49         else if(n>=5)
    50         {
    51             ans += "V";
    52             while(n!=5)
    53             {
    54                 ans += "I";
    55                 n--;
    56             }
    57         }
    58         else if(n==4) ans += "IV";
    59         else
    60         {
    61             while(n--) ans += "I";
    62         }
    63         return ans;        
    64     }
    65 };
      1 class Solution {
      2 public:
      3     int romanToInt(string s) {
      4         int ans = 0, len = s.size(), i = 0;
      5         string str;
      6 
      7         // 有千位数
      8         while(i<len && s[i] == 'M')
      9         {
     10             ans += 1000;
     11             i++;
     12         }
     13         //cout << "i: " << i << "  ans: " << ans << endl;
     14 
     15         // 百位
     16         if(s[i] == 'D')
     17         {
     18             ans += 500;
     19             i++;
     20             while(i<len && s[i]=='C')
     21             {
     22                 ans += 100;
     23                 i++;
     24             }
     25             //cout << ans << endl;
     26         }
     27         if(s[i] == 'C')
     28         {
     29             if(i<len && s[i+1] == 'M')
     30             {
     31                 ans += 900;
     32                 i++; i++;
     33             }
     34             else if(i<len && s[i+1] == 'D')
     35             {
     36                 ans += 400;
     37                 i++; i++;
     38             }
     39             else
     40             {
     41                 while(i<len && s[i]=='C')
     42                 {
     43                     ans += 100;
     44                     i++;
     45                 }
     46             }
     47             //cout << ans << endl;
     48         }
     49 
     50         // 十位
     51         if(s[i] == 'L')
     52         {
     53             ans += 50;
     54             i++;
     55             while(i<len && s[i]=='X')
     56             {
     57                 ans += 10;
     58                 i++;
     59             }
     60             //cout << ans << endl;
     61         }
     62         if(s[i] == 'X')
     63         {
     64             if(i<len && s[i+1] == 'C')
     65             {
     66                 ans += 90;
     67                 i++; i++;
     68             }
     69             else if(i<len && s[i+1] == 'L')
     70             {
     71                 ans += 40;
     72                 i++; i++;
     73             }
     74             else
     75             {
     76                 while(i<len && s[i]=='X')
     77                 {
     78                     ans += 10;
     79                     i++;
     80                 }
     81             }
     82             //cout << ans << endl;
     83         }
     84 
     85         //个位
     86         if(s[i] == 'V')
     87         {
     88             ans += 5;
     89             i++;
     90             while(i<len && s[i]=='I')
     91             {
     92                 ans += 1;
     93                 i++;
     94             }
     95             //cout << ans << endl;
     96         }
     97         if(s[i] == 'I')
     98         {
     99             if(i<len && s[i+1] == 'X')
    100             {
    101                 ans += 9;
    102                 i++; i++;
    103             }
    104             else if(i<len && s[i+1] == 'V')
    105             {
    106                 ans += 4;
    107                 i++; i++;
    108             }
    109             else
    110             {
    111                 while(i<len && s[i]=='I')
    112                 {
    113                     ans += 1;
    114                     i++;
    115                 }
    116             }
    117             //cout << ans << endl;
    118         }
    119         return ans;
    120     }
    121 };
  • 相关阅读:
    获取父窗口的xxx节点的方法
    enumeration
    关于Java正则表达式的一些理解
    简单JNI的使用在Java中调用C库函数
    cursor管理
    [转]Vim配置与高级技巧
    [转]Vim+Taglist+Ctags
    在Windows下面使用cygwin将含有JNI的C文件编译成DLL文件
    vim转换大小写
    JMeter学习资料集锦
  • 原文地址:https://www.cnblogs.com/kathyrine/p/4459320.html
Copyright © 2011-2022 走看看