【LeetCode刷題記錄】13. 羅馬數字轉整數

題目描述:
在這裏插入圖片描述
在這裏插入圖片描述
題解:
一、直接求解(時間複雜度O(n),空間複雜度O(1))

int romanToInt(string s) {
 int rst = 0;
 for (int i = 0; i < s.size(); i++) {
  switch (s[i])
  {
  case 'M':rst += 1000; break;
  case 'D':rst += 500; break;
  case 'C':
   if (i < (s.size() - 1) && (s[i + 1] == 'D' || s[i + 1] == 'M'))rst -= 100;
   else rst += 100;
   break;
  case 'L':rst += 50; break;
  case 'X':
   if (i < (s.size() - 1) && (s[i + 1] == 'L' || s[i + 1] == 'C'))rst -= 10;
   else rst += 10;
   break;
  case 'V':rst += 5; break;
  case 'I':
   if (i < (s.size() - 1) && (s[i + 1] == 'V' || s[i + 1] == 'X'))rst -= 1;
   else rst += 1;
   break;
  default:
   break;
  }
 }
 return rst;
}

二、哈希表(時間複雜度O(n),空間複雜度O(1))
問題規模小,使用hash map略顯多餘。

int romanToInt(string s) {
 unordered_map<char, int> mp;
 mp['I'] = 1;
 mp['V'] = 5;
 mp['X'] = 10;
 mp['L'] = 50;
 mp['C'] = 100;
 mp['D'] = 500;
 mp['M'] = 1000;
 int pos = 0, neg = 0;
 for (int i = 0; i < s.size() - 1; ++i) {
  if (mp[s[i]] < mp[s[i + 1]])
   neg -= mp[s[i]];
  else
   pos += mp[s[i]];
 }
 pos += mp[s.back()];
 return pos + neg;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章