当前位置: 面试刷题>> 罗马数字转整数(经典算法150题)


### 题目描述 罗马数字是古罗马使用的一种数字系统,它采用不同的符号来表示不同的数值,例如 `I` 表示 1,`V` 表示 5,`X` 表示 10,`L` 表示 50,`C` 表示 100,`D` 表示 500,`M` 表示 1000。罗马数字遵循从左到右的读取规则,但是有一个例外,当较小的数字在较大的数字左边时,表示从较大的数字中减去较小的数字。例如,`IV` 表示 4,`VI` 表示 6,而 `IX` 表示 9。 给定一个罗马数字,将其转换成整数。请编写一个函数来实现这一转换,并在 PHP、Python 和 JavaScript 中分别给出示例代码。 ### PHP 示例代码 ```php function romanToInt($roman) { $map = ['I' => 1, 'V' => 5, 'X' => 10, 'L' => 50, 'C' => 100, 'D' => 500, 'M' => 1000]; $result = 0; $n = strlen($roman); for ($i = 0; $i < $n - 1; $i++) { $value = $map[$roman[$i]]; $nextValue = $map[$roman[$i + 1]]; if ($value < $nextValue) { $result -= $value; } else { $result += $value; } } // 添加最后一个字符的值,因为它没有下一个字符进行比较 $result += $map[$roman[$n - 1]]; return $result; } // 示例 echo romanToInt("MCMXCIV"); // 输出 1994 ``` ### Python 示例代码 ```python def romanToInt(s: str) -> int: map = {'I': 1, 'V': 5, 'X': 10, 'L': 50, 'C': 100, 'D': 500, 'M': 1000} result = 0 n = len(s) for i in range(n - 1): value = map[s[i]] next_value = map[s[i + 1]] if value < next_value: result -= value else: result += value # 加上最后一个字符的值 result += map[s[n - 1]] return result # 示例 print(romanToInt("MCMXCIV")) # 输出 1994 ``` ### JavaScript 示例代码 ```javascript function romanToInt(s) { const map = {'I': 1, 'V': 5, 'X': 10, 'L': 50, 'C': 100, 'D': 500, 'M': 1000}; let result = 0; for (let i = 0; i < s.length - 1; i++) { let value = map[s[i]]; let nextValue = map[s[i + 1]]; if (value < nextValue) { result -= value; } else { result += value; } } // 加上最后一个字符的值 result += map[s[s.length - 1]]; return result; } // 示例 console.log(romanToInt("MCMXCIV")); // 输出 1994 ``` 在以上代码中,我们使用了哈希表(在 PHP 中是关联数组,Python 和 JavaScript 中是对象)来存储罗马数字到整数的映射,并通过遍历字符串中的每个字符来计算其对应的整数值。在遍历过程中,我们需要特别注意处理特殊情况,即当较小的数字在较大的数字左边时,应从较大的数字中减去较小的数字。最后,我们将计算得到的整数值返回作为结果。
推荐面试题