1. 程式人生 > >leetcode 13 Roman to Integer (羅馬數轉換成整數)

leetcode 13 Roman to Integer (羅馬數轉換成整數)

題目要求

將羅馬數字轉換為整數,其中羅馬數字有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; } };

原題連結:https://leetcode.com/problems/roman-to-integer/