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

一、问题

在这里插入图片描述

二、代码理解

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

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

第二种方案:

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

再次尝试:

class Solution:
    def romanToInt(self, s: str) -> int:
        d = {
    
    
            'I': 1, 'V': 5, 'X': 10, 'L': 50, 'C': 100, 'D': 500, 'M': 1000
        }
        res = 0
        prev_val = 0
        
        for c in reversed(s):
            curr_val = d[c]
            if curr_val < prev_val:
                res -= curr_val
            else:
                res += curr_val
            prev_val = curr_val
        
        return res

最后一版:

class Solution:
    def romanToInt(self, s: str) -> int:
        roman_values = {
    
    
            'I': 1, 'V': 5, 'X': 10, 'L': 50, 'C': 100, 'D': 500, 'M': 1000
        }
        res = 0
        prev_val = 0
        
        for c in reversed(s):
            curr_val = roman_values[c]
            if curr_val < prev_val:
                res -= curr_val
            else:
                res += curr_val
            prev_val = curr_val
        
        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 中,最终得到整数形式的罗马数字。代码利用了反向迭代的特性,避免了每次比较字符的前后关系,从而简化了逻辑和代码实现。

最终的结果为:

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/wzk4869/article/details/130734003