题解 | #牛牛的罗马时代节日#
牛牛的罗马时代节日
https://www.nowcoder.com/practice/97447e046b704ffda3f51281bd7e296b
知识点:哈希表
思路:
首先定义了一个存储罗马数字与整数之间对应关系的哈希表mp
,使用unordered_map
来实现。然后,函数通过循环遍历字符串数组中的每个罗马数字:
- 在每次迭代中,调用辅助函数
get
来将字符串转换为对应的整数值,并将其累加到结果res
中。
辅助函数get
用于将罗马数字字符串转换为整数。函数遍历字符串中的每个字符,依次进行如下操作:
- 首先,它判断当前字符是否是第一个字符或者当前字符对应的整数值小于等于上一个字符对应的整数值。如果是,则将该字符对应的整数值加到结果
res
中。 - 否则,当前字符对应的整数值大于上一个字符对应的整数值。在这种情况下,需要减去上一个字符对应的整数值并加上当前字符对应的整数值,以计算正确的整数值。
最后,函数返回计算得到的总和res
。
编程语言:java
import java.util.*; public class Solution { /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param cowsRomanNumeral string字符串一维数组 * @return int整型 */ static HashMap<Character, Integer> mp = new HashMap<>(); static { mp.put('I', 1); mp.put('V', 5); mp.put('X', 10); mp.put('L', 50); mp.put('C', 100); mp.put('D', 500); mp.put('M', 1000); } public int sumOfRomanNumerals(String[] cowsRomanNumeral) { int n = cowsRomanNumeral.length; int res = 0; for (String s : cowsRomanNumeral) { res += get(s); } return res; } public static int get(String s) { int res = 0; for (int i = 0; i < s.length(); i++) { if (i == 0 || mp.get(s.charAt(i)) <= mp.get(s.charAt(i - 1))) { res += mp.get(s.charAt(i)); } else { res -= mp.get(s.charAt(i - 1)); res += mp.get(s.charAt(i)) - mp.get(s.charAt(i - 1)); } } return res; } }