【Leetcode刷题】算法:罗马数字转整数

今天药忘吃喽~ 2023-09-27 23:13 176阅读 0赞

文章目录

  • 一、问题
  • 二、代码理解

一、问题

在这里插入图片描述

二、代码理解

  1. class Solution:
  2. def romanToInt(self, s: str) -> int:
  3. answer=0
  4. length = len(s)
  5. d={
  6. 'I':1,'V':5,'X':10, 'L':50,'C':100, 'D':500,'M':1000}
  7. for i in range(length-1):
  8. if d[s[i+1]]>d[s[i]]:
  9. answer=answer-d[s[i]]
  10. else:
  11. answer=answer+d[s[i]]
  12. answer=answer+d[s[length-1]]
  13. return answer
  • 定义一个 Solution 类,该类包含一个 romanToInt 方法用于将罗马数字转换为整数。
  • 初始化变量 answer 为 0,用于保存转换后的整数值。
  • 获取输入字符串 s 的长度,并保存在变量 length 中。
  • 创建一个字典 d,将每个罗马数字字符与对应的数值进行映射。
  • 使用 for 循环遍历 s 中的每个字符,从第一个字符到倒数第二个字符。
  • 如果当前字符的数值小于后一个字符的数值,则将 answer 减去当前字符的数值。
  • 否则,将 answer 加上当前字符的数值。
  • 将 answer 加上最后一个字符所对应的数值,完成整个罗马数字的转换。
  • 返回最终的结果 answer。

这段代码的目的是通过遍历罗马数字字符串 s,根据相邻字符的大小关系,将对应的数值累加或累减到 answer 中,最终得到整数形式的罗马数字。

第二种方案:

  1. class Solution:
  2. def romanToInt(self, s: str) -> int:
  3. answer = 0
  4. length = len(s)
  5. d = {
  6. 'I': 1, 'V': 5, 'X': 10, 'L': 50, 'C': 100, 'D': 500, 'M': 1000}
  7. for i in range(length-1):
  8. if d[s[i]] < d[s[i+1]]:
  9. answer -= d[s[i]]
  10. else:
  11. answer += d[s[i]]
  12. answer += d[s[length-1]]
  13. return answer

再次尝试:

  1. class Solution:
  2. def romanToInt(self, s: str) -> int:
  3. d = {
  4. 'I': 1, 'V': 5, 'X': 10, 'L': 50, 'C': 100, 'D': 500, 'M': 1000
  5. }
  6. res = 0
  7. prev_val = 0
  8. for c in reversed(s):
  9. curr_val = d[c]
  10. if curr_val < prev_val:
  11. res -= curr_val
  12. else:
  13. res += curr_val
  14. prev_val = curr_val
  15. return res

最后一版:

  1. class Solution:
  2. def romanToInt(self, s: str) -> int:
  3. roman_values = {
  4. 'I': 1, 'V': 5, 'X': 10, 'L': 50, 'C': 100, 'D': 500, 'M': 1000
  5. }
  6. res = 0
  7. prev_val = 0
  8. for c in reversed(s):
  9. curr_val = roman_values[c]
  10. if curr_val < prev_val:
  11. res -= curr_val
  12. else:
  13. res += curr_val
  14. prev_val = curr_val
  15. return res
  • 定义一个 Solution 类,该类包含一个 romanToInt 方法用于将罗马数字转换为整数。
  • 创建一个字典 roman_values,将每个罗马数字字符与对应的数值进行映射。
  • 初始化变量 res 为 0,用于保存转换后的整数值。
  • 初始化变量 prev_val 为 0,用于保存前一个字符的数值。
  • 使用 reversed() 函数对字符串 s 进行反向迭代,从最后一个字符到第一个字符。
  • 对于每个字符 c,获取它对应的数值 curr_val。
  • 如果 curr_val 小于 prev_val,说明当前字符表示的数值应该减去,因此将其从 res 中减去。
  • 否则,将 curr_val 加到 res 中。
  • 更新 prev_val 为当前字符的数值。
  • 返回最终的结果 res,即整数形式的罗马数字。

这段代码的目的是通过反向迭代罗马数字字符串 s,根据相邻字符的大小关系,将对应的数值累加或累减到 res 中,最终得到整数形式的罗马数字。代码利用了反向迭代的特性,避免了每次比较字符的前后关系,从而简化了逻辑和代码实现。

最终的结果为:

在这里插入图片描述

发表评论

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

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

相关阅读