LeetCode 13.羅馬數字轉整數
阿新 • • 發佈:2018-12-11
目錄
0. 題目描述
1. 解題分析
(1)思路也很簡單:逐一讀取字串,根據轉換規則進行轉換。為了減少if邏輯判斷,用了map來儲存羅馬數字與對應的整數,增加了一點空間消耗。
#include<string> #include<map> static auto _=[]() //提升io效能 { ios::sync_with_stdio(false); cin.tie(0); return 0; }(); class Solution { public: int romanToInt(string s) { string roman[] = { "I", "V", "X", "L", "C", "D", "M", "IV", "IX", "XL", "XC", "CD", "CM"}; int number[] = { 1, 5, 10, 50, 100, 500, 1000, 4, 9, 40, 90, 400, 900}; map<string, int> dictionary; for (int i = 0; i < 13; i++) { dictionary.insert(pair<string, int>(roman[i], number[i])); } int intNum = 0; int length = s.length(); for (int i = 0; i < length; i++) { if (i != length - 1) { string temp = s.substr(i, 2); if (temp == "IV" || temp == "IX" || temp == "XL" || temp == "XC" || temp == "CD" || temp == "CM") { intNum += dictionary[s.substr(i, 2)]; i++; } else { intNum += dictionary[s.substr(i, 1)]; } } else { intNum += dictionary[s.substr(i, 1)]; } } return intNum; } };
複雜度分析
- 時間複雜度:O(n)。
- 空間複雜度:O(1)。
測試用時56ms,優於81%左右的提交。而直接多層的if判斷,測試用時44ms,優於96%左右的提交。
結果表明跟直接寫多層的if判斷比起來,反而更增加了時間空間消耗= =。可以說是費力不討好了……唯一優點是程式碼簡潔易讀。