image.png

解释

从上面几个示例可以看出,只要当前数字比后一位小的,就意味着这个数字是要被减去的。所以我们只要判断当前数字是否比后一位数字小即可,如果小于,则直接减去当前数字。

  1. var romanToInt = function (s) {
  2. const map = {
  3. 'I': 1,
  4. 'V': 5,
  5. 'X': 10,
  6. 'L': 50,
  7. 'C': 100,
  8. 'D': 500,
  9. 'M': 1000,
  10. }
  11. let before = 0
  12. let sum = 0
  13. for (let a of s) {
  14. if (before < map[a]) {
  15. sum -= before
  16. } else {
  17. sum += before
  18. }
  19. before = map[a]
  20. }
  21. // 经过 for 循环之后是还没把最后一位数字加上,所以需要在这里补上
  22. sum += before
  23. return sum
  24. };
  • 时间复杂度是 13. 罗马数字转整数 - 图2
  • 空间复杂度 13. 罗马数字转整数 - 图3