leetcode 13 Roman to Integer (羅馬數轉換成整數)
阿新 • • 發佈:2018-12-31
題目要求
將羅馬數字轉換為整數,其中羅馬數字有7種“Ⅰ,V, X, L, C, D, M”,含義屬下表所示:
Ⅱ: 表示兩個Ⅰ相加(1+1=2)
XⅡ: 表示X 和Ⅱ相加(10+2 = 12)
需要注意的是!!!
羅馬數字在書寫時遵循著從左到右是數值遞增(就是右邊的數會比左邊的大,如XV)的順序,然而有一些情況是左邊的數會小於右邊的數,如 Ⅳ,那麼這時不再用相加去計算,而是用減法,即 V-Ⅰ = 5-1=4.
在羅馬數字中共有六種特殊情況,具體內容看一下這個規則:
(1)當Ⅰ在V,X左邊時,分別表示4(Ⅳ),9(Ⅸ)
(2)當 X 在L,C左邊時,分別表示40(XL),90(XC)
(3)當 C在D,M左邊時,分別表示400(CD),900(CM)
輸入例項
Input :“Ⅲ”
Output:3
Input :“Ⅳ”
Output:4
Input :"Ⅸ“
Output:9
Input: “LVIII”
Output: 58
Input: “MCMXCIV”
Output: 1994
思路 :
我們對輸入的字串進行遍歷,看當前遍歷的字元屬於Ⅰ,V, X, L, C, D, M,那類,根據類別找到其對應的值即可。需要處理的特殊情況有上面規則中出現的六種,我們只需要在判斷類別後,再對是否屬於特殊情況進行判斷即可,所以我們選用switch進行操作。
主要程式碼 ( C++ ):
// leetcode 013
// roman to Integer
class Solution{
class Solution{
public:
int romanToInt(string s){
int sum = 0;
for(int i=0;i<s.size();i++){
switch(s[i]){
case 'M':sum+=1000; break;
case 'D':sum+=500;break;
case 'C':
//一定要用==去判斷,
//!=判斷條件為真就執行的話會報錯。
if(s[ i+1] =='M' || s[i+1] == 'D') sum-=100;
else sum+=100;
break;
case 'L':sum+=50;break;
case 'X':
if(s[i+1] =='C' || s[i+1] == 'L') sum-=10;
else sum+=10;
break;
case 'V':sum+=5; break;
case'I':
if(s[i+1] =='V' || s[i+1] == 'X') sum-=1;
else sum+=1;
break;
}
}
return sum;
}
};