【leetcode】整数转罗马数字、罗马数字转整数【Python】

叁歲伎倆 2022-05-09 12:03 420阅读 0赞

题目链接
在这里插入图片描述
递归算法,需要注意40~50的情况特殊性

  1. class Solution(object):
  2. def intToRoman(self, num):
  3. if num == 0: return ''
  4. if num == 4: return 'IV'
  5. if num == 9: return 'IX'
  6. if num == 40: return 'XL'
  7. if num == 90: return 'XC'
  8. if num == 400: return 'CD'
  9. if num == 900: return 'CM'
  10. if num >= 1 and num <= 3:
  11. return 'I' * num
  12. if num >= 5 and num <= 8:
  13. return 'V' + self.intToRoman(num - 5)
  14. if num >= 10 and num <= 39:
  15. m = (int)(num / 10)
  16. return 'X' * m + self.intToRoman(num - 10 * m)
  17. if num > 40 and num <= 49:
  18. return 'XL' +self.intToRoman(num - 40)
  19. if num >= 50 and num < 90:
  20. return 'L' + self.intToRoman(num - 50)
  21. if num >= 90 and num <= 99:
  22. return 'XC' + self.intToRoman(num - 90)
  23. if num >= 100 and num <= 399:
  24. m = (int)(num / 100)
  25. return 'C' * m + self.intToRoman(num - m * 100)
  26. if num > 400 and num <= 499:
  27. return 'CD' + self.intToRoman(num - 400)
  28. if num >= 500 and num < 900:
  29. return 'D' + self.intToRoman(num - 500)
  30. if num > 900 and num <= 999:
  31. return 'CM' +self.intToRoman(num - 900)
  32. if num >= 1000 and num <= 4000:
  33. m = (int)(num / 1000)
  34. return 'M' * m + self.intToRoman(num - m * 1000)
  35. print(Solution().intToRoman(2000))

可以使用字典的方式,一步一步减去,采用字典的方式

  1. class Solution(object):
  2. def intToRoman(self, num):
  3. """ :type num: int :rtype: str """
  4. if num > 3999 or num < 1:
  5. return 0
  6. # 字典是无序的,所以不使用字典
  7. # 注意这里一定要是倒序,否则执行会有问题,让数从大往小查找适合的罗马数
  8. num_tuple = [1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1]
  9. roman_tuple = ['M', 'CM', 'D', 'CD', 'C', 'XC', 'L', 'XL', 'X', 'IX', 'V', 'IV', 'I']
  10. # 记录结果的字符串
  11. result_str = ""
  12. # 从整数的列表中开始遍历
  13. for i in range(len(num_tuple)):
  14. # 从大往小开始判断,num小于当前数则进行下一次循环
  15. # num大于当前数则进行减法运算,并取出相应位置的Roman数
  16. while num >= num_tuple[i]:
  17. num -= num_tuple[i]
  18. result_str += roman_tuple[i]
  19. return result_str

罗马数字转整数同样用字典

  1. class Solution(object):
  2. def romanToInt(self, s):
  3. """ :type s: str :rtype: int """
  4. dic = { 'M':1000, 'D':500, 'C':100, 'L':50, 'X':10, 'V':5, 'I':1}
  5. num = 0
  6. for i in range(len(s)):
  7. if i < len(s) - 1 and dic[s[i]] < dic[s[i + 1]]:
  8. num -= int(dic[s[i]])
  9. else:
  10. num += int(dic[s[i]])
  11. return num
  12. print(Solution().romanToInt('MCMXCIV'))

发表评论

表情:
评论列表 (有 0 条评论,420人围观)

还没有评论,来说两句吧...

相关阅读