题解 | #牛牛和罗马数字智力游戏#
牛牛和罗马数字智力游戏
https://www.nowcoder.com/practice/7f4bd3b2d7d34f5c87d84120d9782c1d
知识点:哈希表
思路:
首先定义了一个有序的映射表mp,存储了整数与对应的罗马数字之间的关系。使用LinkedHashMap来保持插入顺序。
在循环中,依次遍历映射表中的每一对键值对。在每次迭代中,使用一个while循环,将整数num按照当前键值对表示的罗马数字进行拆分并追加到结果字符串res中,同时减去相应的整数值。
最后,根据limit参数的限制,判断结果字符串的长度是否超过了限制,如果超过则将其进行翻转。
最终,函数返回转换后的罗马数字字符串res。
编程语言:java
import java.util.*;
public class Solution {
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param num int整型
* @param limit int整型
* @return string字符串
*/
static LinkedHashMap<Integer, String> mp = new LinkedHashMap<>();
static {
mp.put(1000, "M");
mp.put(900, "CM");
mp.put(500, "D");
mp.put(400, "CD");
mp.put(100, "C");
mp.put(90, "XC");
mp.put(50, "L");
mp.put(40, "XL");
mp.put(10, "X");
mp.put(9, "IX");
mp.put(5, "V");
mp.put(4, "IV");
mp.put(1, "I");
}
public String integerToRomanWithReverse(int num, int limit) {
StringBuilder res = new StringBuilder();
for (Integer val : mp.keySet()) {
String s = mp.get(val);
while (num >= val) {
num -= val;
res.append(s);
}
}
if (res.length() >= limit) {
res.reverse();
}
return res.toString();
}
}