【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;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章