image.png

思路:递归

  • 如果左边的数字比右边的数字小,那么就说明左边的那个数字必然要取负值
  • 如果左边的数字比右边的数字大,那么说明是正常的,往上加就行了
  • 每个字符串,判断第一个字符和第二个字符的大小关系,确定第一个字符的正负即可
  • 重复判断的过程,形成递归

代码:

  1. class Solution:
  2. def __init__(self):
  3. self.roman_dict = {
  4. 'I': 1,
  5. 'V': 5,
  6. 'X': 10,
  7. 'L': 50,
  8. 'C': 100,
  9. 'D': 500,
  10. 'M': 1000
  11. }
  12. def romanToInt(self, s: str) -> int:
  13. if len(s) == 1:
  14. return self.roman_dict[s[0]]
  15. if self.roman_dict[s[0]] >= self.roman_dict[s[1]]:
  16. return self.romanToInt(s[1:]) + self.roman_dict[s[0]]
  17. else:
  18. return self.romanToInt(s[1:]) - self.roman_dict[s[0]]