在Java中使用 Hashmap 将罗马数字转换为十进制
给定一个罗马数字,任务是找到对应的十进制值。
注意:罗马数字由七个不同的符号表示:I、V、X、L、C、D 和 M。
例子:
Input: “III”
Output: 3
Input: “MDCCLX”
Output: 1760
方法:
- 循环遍历包含罗马数字的字符串中的每个字符。
- 将当前罗马符号的值与其右侧的罗马符号的值进行比较。如果当前值大于或等于右侧符号的值,则将当前符号的值添加到总数中。如果当前值小于右侧符号的值,则从总数中减去当前符号的值。
下面是上述方法的实现:
Java
// Java Program to Convert a Roman
// Number to Decimal using Hashmap
import java.io.*;
import java.util.Scanner;
import java.util.HashMap;
class solution {
int romanToInt(String s)
{
// Create a empty hash map.
HashMap map = new HashMap<>();
// Putting value in hash map.
map.put('I', 1);
map.put('V', 5);
map.put('X', 10);
map.put('L', 50);
map.put('C', 100);
map.put('D', 500);
map.put('M', 1000);
// Creating integer variable to store result.
int result = 0;
// initialize loop to iterate in string.
for (int i = 0; i < s.length(); i++) {
// Checking that current element
// is not smaller then previous
if (i > 0
&& map.get(s.charAt(i))
> map.get(s.charAt(i - 1))) {
result += map.get(s.charAt(i))
- 2 * map.get(s.charAt(i - 1));
}
else {
result += map.get(s.charAt(i));
}
}
// Returning the integer value of Roman number.
return result;
}
}
public class GFG {
public static void main(String[] args)
{
String s;
// Scanner sc = new Scanner(System.in);
// s = sc.nextLine();
solution gfg = new solution();
System.out.println(gfg.romanToInt("MDCCLX"));
}
}
输出:
1760
时间复杂度: O(N)
辅助空间: O(1)