题解 | #牛牛和罗马数字智力游戏#
牛牛和罗马数字智力游戏
https://www.nowcoder.com/practice/7f4bd3b2d7d34f5c87d84120d9782c1d
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(); } }
知识点:
哈希表
解题分析:
首先定义了一个有序的映射表mp
,存储了整数与对应的罗马数字之间的关系。使用LinkedHashMap
来保持插入顺序。
在循环中,依次遍历映射表中的每一对键值对。在每次迭代中,使用一个while
循环,将整数num
按照当前键值对表示的罗马数字进行拆分并追加到结果字符串res
中,同时减去相应的整数值。
最后,根据limit
参数的限制,判断结果字符串的长度是否超过了限制,如果超过则将其进行翻转。
最终,函数返回转换后的罗马数字字符串res
。
编程语言:
java