题解 | #牛牛的罗马时代节日# java
牛牛的罗马时代节日
https://www.nowcoder.com/practice/97447e046b704ffda3f51281bd7e296b
import java.util.*; public class Solution { /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param cowsRomanNumeral string字符串一维数组 * @return int整型 */ public int sumOfRomanNumerals (String[] cowsRomanNumeral) { // write code here Map<Character, Integer> romanMap = new HashMap<>(); romanMap.put('I', 1); romanMap.put('V', 5); romanMap.put('X', 10); romanMap.put('L', 50); romanMap.put('C', 100); romanMap.put('D', 500); romanMap.put('M', 1000); int sum = 0; int currentValue = 0; for (String roman : cowsRomanNumeral) { int prevValue = 0; for (int i = 0; i < roman.length(); i++) { currentValue = romanMap.get(roman.charAt(i)); if (currentValue > prevValue) { sum -= prevValue * 2; } sum += currentValue; prevValue = currentValue; } } return sum; } }
Java语言。
该题考察的知识点包括:
- 哈希表的
- 字符串
代码的文字解释如下:
- 创建一个HashMap对象
romanMap
,用于存储罗马数字字符与对应的数值的映射关系。 - 初始化总和
sum
为0,当前字符的数值currentValue
为0。 - 遍历每头牛的罗马数字字符串。
- 在内层循环中,遍历当前罗马数字字符串的每个字符。
- 获取当前字符的数值
currentValue
,通过romanMap.get(roman.charAt(i))
获取。 - 根据当前字符的数值与前一个字符的数值的大小关系,进行相应的累加操作。如果当前字符的数值比前一个字符的数值大,则需要减去前一个字符的数值的两倍(因为前一个字符已经被加过一次了)。 sum -= prevValue * 2;累加当前字符的数值。 sum += currentValue;
- 更新前一个字符的数值
prevValue
为当前字符的数值,为下一次遍历做准备。 - 返回累加的结果作为每头牛的罗马数字之和。