LeetCode第12题目整数转罗马数字

继续打卡算法题,今天学习的是第LeetCode的第12题目整数转罗马数字,这道题目是道中等题。算法题的一些解题思路和技巧真的非常巧妙,每天看一看算法题和解题思路,我相信对我们的编码能力有一些帮助。

分析一波题目

这个题目要求数字小于3999。罗马数字最大能表示1000,罗马数字最小表示1。

我们需要注意这个题目的技巧,先用大的罗马数字占用,再用小的。

比如3001,我们先要用三个MMM表示3000,再使用I表示1,那么3001=MMMI。

怎么才能先表示最大1000呢,我们需要有一个排序结构,同时需要有罗马数字和整数的映射,所以我们需要用到TreeMap结构。它可以定制key的顺序,我们按照整数从大到小排序就可以了。

编码解决

java 复制代码
class Solution {
    public String intToRoman(int num) {

        //这个题目用罗马数字表示数字 ,罗马数字只有七种另加3种特殊情况,我们应优先使用大的罗马数字表示数字。先把大的用完,直到为0
        String result = "";
        //排序的map
        Map<Integer, String> map = new TreeMap<>(Comparator.comparing(Integer::intValue).reversed());

        map.put(1000,"M");
        map.put(900,"CM");
        map.put(500,"D");
        map.put(400,"CD");
        map.put(100,"C");
        map.put(90,"XC");
        map.put(50,"L");
        map.put(40,"XL");
        map.put(10,"X");
        map.put(9,"IX");
        map.put(5,"V");
        map.put(4,"IV");
        map.put(1,"I");

        while(num > 0) {
            //从大的罗马数字开始
            for (Map.Entry<Integer, String> entry : map.entrySet()) {   
                            
                int key = entry.getKey();
                //大的罗马数字能够表示当前整数,取出来
                while(num >= key) {
                    num = num-key;
                    String value = entry.getValue();
                    result = result + value;
                }
            }
        }
        return result;
    }
}

总结

每个算法题目需要了解他的技巧,这样就非常容易解决了,这个题目的核心在于先把大的罗马数字表示完,再比较小的,想通了这一点确实挺简单的。

相关推荐
陈随易19 小时前
有生之年系列,Nodejs进程管理pm2 v7.0发布
前端·后端·程序员
王老师青少年编程20 小时前
csp信奥赛C++高频考点专项训练之贪心算法 --【哈夫曼贪心】:合并果子
c++·算法·贪心·csp·信奥赛·哈夫曼贪心·合并果子
叼烟扛炮20 小时前
C++第二讲:类和对象(上)
数据结构·c++·算法·类和对象·struct·实例化
天疆说20 小时前
【哈密顿力学】深入解读航天器交会最优控制中的Hamilton函数
人工智能·算法·机器学习
陈随易21 小时前
AI时代,你还在坚持手搓文章吗
前端·后端·程序员
wuweijianlove21 小时前
关于算法设计中的代价函数优化与约束求解的技术7
算法
leoufung21 小时前
LeetCode 149: Max Points on a Line - 解题思路详解
算法·leetcode·职场和发展
样例过了就是过了21 小时前
LeetCode热题100 最长公共子序列
c++·算法·leetcode·动态规划
HXDGCL1 天前
矩形环形导轨:自动化循环线的核心运动单元解析
运维·算法·自动化
大鱼七成饱1 天前
VMware NAT模式下固定内网IP(附详细图文)
后端