文章目录
- 一、问题
- 二、代码理解
一、问题
二、代码理解
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 中,最终得到整数形式的罗马数字。代码利用了反向迭代的特性,避免了每次比较字符的前后关系,从而简化了逻辑和代码实现。
最终的结果为: