map+for循环

时间复杂度O(n),空间复杂度O(1),
初始化为最后一个数值,从末尾开始遍历,当前位与前一位进行对比判断前一位是加还是减
前一位 > 当前位:总和加上前一位,反之则减去前一位

  1. var romanToInt = function (s) {
  2. const map = new Map()
  3. map.set('I', 1)
  4. map.set('V', 5)
  5. map.set('X', 10)
  6. map.set('L', 50)
  7. map.set('C', 100)
  8. map.set('D', 500)
  9. map.set('M', 1000)
  10. let value = map.get(s[s.length - 1])
  11. for (let i = s.length - 1; i > 0; i--) {
  12. if (map.get(s[i]) > map.get(s[i - 1])) {
  13. value -= map.get(s[i - 1])
  14. } else {
  15. value += map.get(s[i - 1])
  16. }
  17. }
  18. return value
  19. };