leetcode刷題之Roman to Integer(13)
阿新 • • 發佈:2018-12-22
羅馬數由七個數字組成:I, V, X, L, C, D,M.
Symbol Value
I 1
V 5
X 10
L 50
C 100
D 500
M 1000
2可以用II表示,即兩個一一起。12寫作XII,即X+II。27寫作XXVII即XX+V+II.
羅馬數一般從左到右由大到小,但是4並不是寫作IIII而是IV,因為I寫在V前面所以就是V-I等於4.以下是一些可以用的減法法則:
- I可以放在 V (5)和 X (10) 來表示4和9
- X可以放在L (50) 和C (100)來表示40和90
- C可以放在D (500)和M (1000)來表示400和900
題目:給出一個羅馬數字,將其轉換成整型(Integer),羅馬數字的範圍在1到3099之間。I-MMMIC
思路:先統計單個羅馬數出現次數,每次出現加上其值。再檢視特殊數字IV,IX,XL,XC,CD和CM是否出現,每次出現減去對應的I,X以及C的雙倍值(統計的時候加了一次其代表的值,這裡需要減去雙倍)
程式碼:
Java
public static int solution(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[] nums=s.toCharArray(); for(int i=0;i<s.length();i++){ if(nums[i] == 'I'){ sum+=1; } if(nums[i] == 'V'){ sum+=5; } if(nums[i] == 'X'){ sum+=10; } if(nums[i] == 'L'){ sum+=50; } if(nums[i] == 'C'){ sum+=100; } if(nums[i] == 'D'){ sum+=500; } if(nums[i] == 'M'){ sum+=1000; } } return sum; }