当前位置: 面试刷题>> 例 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 示例代码

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 示例代码

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 示例代码

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

码小课:在码小课网站上,你可以找到更多关于算法和数据结构的学习资源,包括详细的讲解、练习题以及实战项目,帮助你更好地掌握编程技能。

推荐面试题