题解 | #牛牛和罗马数字智力游戏#

牛牛和罗马数字智力游戏

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();
    }

}

全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务