Java 罗马数字转整数

17 Mar 2025 | 4 分钟阅读

这是一个在 Google、Amazon、TCS、Accenture 等顶级 IT 公司面试中经常出现的问题。通过解决这个问题,面试官想考察面试者的逻辑能力、批判性思维和解决问题的能力。因此,在本节中,我们将讨论 如何在 Java 中使用不同的方法和逻辑将罗马数字转换为整数。此外,我们还将为之创建 Java 程序。

Convert Roman to Integer in Java

罗马数字

罗马数字是数字的符号表示。它们通常用于钟表盘、音乐理论等。有 七个 字母用于表示罗马数字。下表表示罗马数字和相应的十进制值。

罗马数字整数值
I1
V5
X10
L50
C100
D500
M1000

罗马数字通过连接符号并添加各自的值来形成。它们通常从左到右以从大到小的顺序书写。

然而,整数 4 的罗马数字不是 IIII;相反,它被写成 IV。这意味着当一个较小的数字放在一个较大的数字之前时,这些值是相减的;因为 1 放在 5 之前,我们可以相减得到 4

同样的原则适用于数字 9,它被写成 IX

有六种情况需要减法

  • I 可以放在 V (5) 和 X 之前,组成 4 和 9。
  • X 可以放在 L (50) 和 C 之前,组成 40 和 90。
  • C 可以放在 D (500) 和 M 之前,组成 400 和 900。

示例 1

假设,我们必须将罗马数字 MCMXC 转换为整数。为了获得整数值,我们将写出每个罗马数字的相应值并求和。因此,我们得到

M=1000, C=100, M=1000, X=10, C=100

M=1000

CM=1000-100 = 900

XC=100-10 = 90

故,

M=1000, CM=900, XC=90 = 1990

因此,MCMXC 等于 1990

让我们看另一个例子。

示例 2

考虑罗马数字 LVIII。

L=50, V=5, III=8

L+V+III = 50+5+3 = 58

算法

  • 遍历给定罗马数字字符串的每个字符。
  • 将当前罗马字符的值与其右侧罗马字符的值进行比较。
  1. 如果当前值大于或等于右侧符号的值,则将当前字符的值添加到总变量中。
  2. 如果当前值小于右侧符号的值,则从总变量中减去当前字符的值。

让我们在 Java 程序中实现上述步骤。

Java 程序将罗马数字转换为 Java 中的整数

RomanToInteger1.java

输出

The corresponding Integer value is: 1155

复杂度

上述方法的时间和空间复杂度为 O(n),其中 n 是给定罗马数字字符串的长度。

让我们看看相同的另一个解决方案。

RomanToInteger2.java

输出

The corresponding Integer value is: 1915

复杂度

上述方法的时间复杂度为 O(n),其中 n 是给定罗马数字字符串的长度,空间复杂度为 O(1)