[LeetCode]Roman to Integer

题目是把罗马数字转成整形返回,其实对罗马数字只知道I 到X, 特意去维基百科查了下。发现了如下几条规则:

羅馬數字共有7個,即I(1)、V(5)、X(10)、L(50)、C(100)、D(500)和M(1000)。按照下述的規則可以表示任意正整數。需要注意的是罗马数字中没有“0”,與進位制無關。一般認為羅馬數字只用來記數,而不作演算。

  • 重複數次:一個羅馬數字重複幾次,就表示這個數的幾倍。
  • 右加左減:
  • 在較大的羅馬數字的右邊記上較小的羅馬數字,表示大數字加小數字。
  • 在較大的羅馬數字的左邊記上較小的羅馬數字,表示大數字减小數字。
  • 左减的数字有限制,仅限于I、X、C。比如45不可以写成VL,只能是XLV
  • 但是,左減時不可跨越一個位數。比如,99不可以用IC(100 - 1)表示,而是用XCIX([100 - 10] + [10 - 1])表示。(等同於阿拉伯數字每位數字分別表示。)
  • 左減數字必須為一位,比如8寫成VIII,而非IIX。

于是我就想,其实这套计数规则也很简单,就是出现几次就是几倍,唯一注意的一点就是IV是4,IX是9,等等小数在左代表减法。

然后就想到了,其实一个遍历O(log(n))时间,把所以字符过一遍,和加在一起. 然后把所有特殊情况都除去,就是实际的值。

比如IV出现了,在后来计数里IV算了I+V=6 但是其实是应该减去的,所以相当于多加了2次,-2就可以了。

第一次AC 100%通过一道题。。激动一下


public int romanToInt(String s) {
         int sum=0;
        if(s.indexOf("IV")!=-1){sum-=2;}
        if(s.indexOf("IX")!=-1){sum-=2;}
        if(s.indexOf("XL")!=-1){sum-=20;}
        if(s.indexOf("XC")!=-1){sum-=20;}
        if(s.indexOf("CD")!=-1){sum-=200;}
        if(s.indexOf("CM")!=-1){sum-=200;}
        
        char c[]=s.toCharArray();
        int count=0;
        
       for(;count<=s.length()-1;count++){
           if(c[count]=='M') sum+=1000;
           if(c[count]=='D') sum+=500;
           if(c[count]=='C') sum+=100;
           if(c[count]=='L') sum+=50;
           if(c[count]=='X') sum+=10;
           if(c[count]=='V') sum+=5;
           if(c[count]=='I') sum+=1;
           
       }
       
       return sum;
        
    }


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值