如何利用含特殊情况的字典实现罗马数字转整数函数?
罗马数字转整数函数实现方案
你可以通过优先检查两位组合的方式,借助现有的字典轻松实现转换逻辑——核心思路是先判断当前位置开始的两个字符是否属于字典里的特殊组合(比如IV、IX),如果是就直接取对应值,否则取单个字符的值。具体实现步骤和代码如下:
实现步骤
- 初始化结果变量为0,遍历索引从0开始
- 循环处理字符串:
- 当索引+1未超出字符串长度时,先取当前索引和下一个索引组成的两位子串,检查是否在字典中
- 如果存在,将对应数值加到结果,索引直接+2(跳过下一个字符)
- 如果不存在,取当前单个字符对应的数值加到结果,索引+1
- 遍历结束后返回结果
代码示例
roman_numbers={ "I":1, "V":5, "X":10, "L":50, "C":100, "D":500, "M":1000, "IV":4, "IX":9, "XL":40, "XC":90, "CD":400, "CM":900 } def roman_to_int(s): result = 0 i = 0 n = len(s) while i < n: # 先检查两位组合,避免遗漏特殊情况 if i + 1 < n and s[i:i+2] in roman_numbers: result += roman_numbers[s[i:i+2]] i += 2 else: result += roman_numbers[s[i]] i += 1 return result # 测试示例 print(roman_to_int("III")) # 输出3 print(roman_to_int("IV")) # 输出4 print(roman_to_int("IX")) # 输出9 print(roman_to_int("LVIII")) # 输出58 print(roman_to_int("MCMXCIV")) # 输出1994
关键说明
这种方式不需要额外处理“小数字在大数字前需做减法”的逻辑,因为字典已经预先包含了所有特殊组合,直接匹配即可完成转换,逻辑更简洁直观。
内容的提问来源于stack exchange,提问作者Rida Ruheen Javid Sohail
相关产品推荐
相关产品推荐

