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


题目描述

罗马数字是古罗马使用的一种数字系统,它采用不同符号来表示不同的数值,相同的符号因位置不同可能表示不同的数,例如 I=1, V=5, X=10, L=50, C=100, D=500, M=1000。一个罗马数字通常由这些符号的序列组成,例如 "III" 表示 3,"IV" 表示 4,"VI" 表示 6,"MCMXCIV" 表示 1994。罗马数字的特点是:

  • 当一个符号在另一个符号的左边并且小于它时,表示两个数相加,如 "IV"=4,"VI"=6。
  • 当一个符号在另一个符号的左边并且不小于它时,表示右边的数要减去左边的数,如 "IV"=5-1=4,"IX"=10-1=9。

给定一个罗马数字字符串,将其转换成整数。

示例

  • 输入:"III"

  • 输出:3

  • 输入:"IV"

  • 输出:4

  • 输入:"IX"

  • 输出:9

  • 输入:"LVIII"

  • 输出:58

  • 输入:"MCMXCIV"

  • 输出:1994

PHP 示例代码

function romanToInt($s) {
    $map = [
        'I' => 1,
        'V' => 5,
        'X' => 10,
        'L' => 50,
        'C' => 100,
        'D' => 500,
        'M' => 1000,
    ];
    $total = 0;
    $prev = 0;
    $length = strlen($s);
    for ($i = $length - 1; $i >= 0; $i--) {
        $value = $map[$s[$i]];
        if ($value < $prev) {
            $total -= $value;
        } else {
            $total += $value;
        }
        $prev = $value;
    }
    return $total;
}

// 测试
echo romanToInt("III"); // 输出 3
echo romanToInt("IV"); // 输出 4

Python 示例代码

def romanToInt(s: str) -> int:
    roman_map = {'I': 1, 'V': 5, 'X': 10, 'L': 50, 'C': 100, 'D': 500, 'M': 1000}
    total = 0
    prev = 0
    for char in reversed(s):
        value = roman_map[char]
        if value < prev:
            total -= value
        else:
            total += value
        prev = value
    return total

# 测试
print(romanToInt("III"))  # 输出 3
print(romanToInt("IV"))   # 输出 4

JavaScript 示例代码

function romanToInt(s) {
    const romanMap = {
        'I': 1,
        'V': 5,
        'X': 10,
        'L': 50,
        'C': 100,
        'D': 500,
        'M': 1000,
    };
    let total = 0;
    let prev = 0;
    for (let i = s.length - 1; i >= 0; i--) {
        const value = romanMap[s[i]];
        if (value < prev) {
            total -= value;
        } else {
            total += value;
        }
        prev = value;
    }
    return total;
}

// 测试
console.log(romanToInt("III")); // 输出 3
console.log(romanToInt("IV")); // 输出 4

码小课网站中有更多相关内容分享给大家学习,包括但不限于算法、数据结构、编程语言进阶等内容,帮助大家更好地提升编程能力。

推荐面试题