当前位置: 面试刷题>> 例 154单词表示数字 (经典算法题500道)
**题目描述**:
"例 154单词表示数字" 是一个经典的编程题目,其目标是解析一个由英文字母(大小写均考虑)组成的字符串,这些字母可以代表不同的数字,并组合起来形成一个有效的数学表达式。例如,在常用的映射中,"I" 代表 1,"V" 代表 5,"X" 代表 10,"L" 代表 50,"C" 代表 100,"D" 代表 500,"M" 代表 1000。但是,有些情况下,如 "IV" 或 "IX",它们并不代表直接的加法(即不是 1+5=6 或 1+9=10),而是表示减法,即 "IV" 代表 4("V" 减去前面的 "I"),"IX" 代表 9("X" 减去前面的 "I")。类似地,"XL" 代表 40,"XC" 代表 90,"CD" 代表 400,"CM" 代表 900。
给定一个这样的字符串,编写一个函数来计算并返回它所代表的数字。
**示例**:
- 输入: "III"
- 输出: 3
- 输入: "IV"
- 输出: 4
- 输入: "IX"
- 输出: 9
- 输入: "LVIII"
- 输出: 58
- 输入: "MCMXCIV"
- 输出: 1994
**PHP 示例代码**:
```php
function romanToInt($s) {
$romanMap = [
'I' => 1,
'V' => 5,
'X' => 10,
'L' => 50,
'C' => 100,
'D' => 500,
'M' => 1000
];
$total = 0;
$prevValue = 0;
for ($i = strlen($s) - 1; $i >= 0; $i--) {
$currentValue = $romanMap[$s[$i]];
if ($currentValue < $prevValue) {
$total -= $currentValue;
} else {
$total += $currentValue;
}
$prevValue = $currentValue;
}
return $total;
}
echo romanToInt("MCMXCIV"); // 输出: 1994
```
**Python 示例代码**:
```python
def romanToInt(s):
roman_map = {
'I': 1,
'V': 5,
'X': 10,
'L': 50,
'C': 100,
'D': 500,
'M': 1000
}
total = 0
prev_value = 0
for char in reversed(s):
current_value = roman_map[char]
if current_value < prev_value:
total -= current_value
else:
total += current_value
prev_value = current_value
return total
print(romanToInt("MCMXCIV")) # 输出: 1994
```
**JavaScript 示例代码**:
```javascript
function romanToInt(s) {
const romanMap = {
'I': 1,
'V': 5,
'X': 10,
'L': 50,
'C': 100,
'D': 500,
'M': 1000
};
let total = 0;
let prevValue = 0;
for (let i = s.length - 1; i >= 0; i--) {
const currentValue = romanMap[s[i]];
if (currentValue < prevValue) {
total -= currentValue;
} else {
total += currentValue;
}
prevValue = currentValue;
}
return total;
}
console.log(romanToInt("MCMXCIV")); // 输出: 1994
```
**码小课**:在码小课网站上,你可以找到更多关于算法和数据结构的学习资源,包括详细的讲解、练习题以及实战项目,帮助你更好地掌握编程技能。