罗马数字转整数
哈希表 字符串题目描述
罗马数字由七个不同的符号组成:
通常情况下,罗马数字中小的数字在大的数字右边,将它们逐一相加即可得到结果。但有六种特殊的减法情形:
IV= 4,IX= 9XL= 40,XC= 90CD= 400,CM= 900
给定一个罗马数字字符串,将其转换为整数。
思路分析
最直接的观察是:当前字符的值小于它右边字符的值时,就需要减去当前值;否则加上当前值。
这个规律覆盖了所有六种减法情形,无需对特殊组合逐一判断。
具体做法:
- 建立一张罗马字符到数值的映射表。
- 从左到右遍历字符串,对每个字符:
- 若其值小于下一个字符的值,则将当前值减去。
- 否则将当前值加上。
- 返回累计结果。
算法步骤
- 初始化映射表,将七个罗马字符对应到其整数值。
- 初始化累计结果
ans = 0。 - 遍历字符串,取当前字符的值
value。 - 判断
value是否小于下一个字符的值:若是,ans -= value;否则ans += value。 - 遍历结束后返回
ans。
示例代码
复杂度分析
- 时间复杂度:
O(n),其中n是字符串长度,只需一次线性遍历。 - 空间复杂度:
O(1),映射表大小固定为 7,与输入规模无关。
示例演示
以 MCMXCIV(= 1994)为例,逐字符演示:
最终结果为 1994。