leetCode刷题 & 12. 整数转罗马数字

1. 思路

罗马数字的转换可以通过贪心算法来实现。我们可以按照罗马数字的规则,从大到小依次匹配并减去对应的值,直到 num 变为 0。

2. 解题方法

  1. 初始化一个 StringBuilder 用于存储转换后的罗马数字。
  2. 枚举所有的罗马数字符号,按照从大到小的顺序进行匹配:
    • 如果当前数字大于等于当前符号对应的值,则将对应的符号添加到 StringBuilder 中,并从 num 中减去对应的值。
  3. 重复步骤 2 直到 num 变为 0。
  4. 返回 StringBuilder 转换为的字符串。

3. 复杂度

  • 时间复杂度:O(1),因为罗马数字的数量有限,不随输入变化而变化。
  • 空间复杂度:O(1),只需要常数级别的额外空间。

4. Code

java 复制代码
class Solution {
    public String intToRoman(int num) {
        // 用于存储转换后的罗马数字
        StringBuilder roman = new StringBuilder(); 
        
        // 枚举所有的罗马数字符号,按照从大到小的顺序进行匹配
        while (num > 0) {
            if (num >= 1000) {
                roman.append("M");
                num -= 1000;
            } else if (num >= 900) {
                roman.append("CM");
                num -= 900;
            } else if (num >= 500) {
                roman.append("D");
                num -= 500;
            } else if (num >= 400) {
                roman.append("CD");
                num -= 400;
            } else if (num >= 100) {
                roman.append("C");
                num -= 100;
            } else if (num >= 90) {
                roman.append("XC");
                num -= 90;
            } else if (num >= 50) {
                roman.append("L");
                num -= 50;
            } else if (num >= 40) {
                roman.append("XL");
                num -= 40;
            } else if (num >= 10) {
                roman.append("X");
                num -= 10;
            } else if (num >= 9) {
                roman.append("IX");
                num -= 9;
            } else if (num >= 5) {
                roman.append("V");
                num -= 5;
            } else if (num >= 4) {
                roman.append("IV");
                num -= 4;
            } else {
                roman.append("I");
                num -= 1;
            }
        }
        // 返回转换后的罗马数字字符串
        return roman.toString(); 
    }
}

这段代码通过贪心算法实现了将整数转换为罗马数字的功能,按照题目中的规则逐步转换并减去对应的值。

欢迎大家后台联系讨论。

(一份Java面试宝典,有兴趣的读者姥爷可以私信我领取!!!免费滴)

相关推荐
萧西待水6 小时前
奥赛一本通 1447 靶形数独
算法·深度优先
泯泷8 小时前
那段文字是谁删的?Yjs 14 正式版之前,一套删除归属方案的实现与边界
前端·javascript·算法
hold?fish:palm9 小时前
34 合并K个升序链表
javascript·算法·链表
Navigator_Z11 小时前
LeetCode //C - 1252. Cells with Odd Values in a Matrix
c语言·算法·leetcode
语戚12 小时前
力扣 1621. 大小为K的不重叠线段的数目:动态规划(Java 实现)
java·算法·leetcode·动态规划·力扣·dp
青山木13 小时前
Hot 100 --- 最长有效括号
java·数据结构·算法·leetcode·动态规划
这料鬼有毒14 小时前
二刷hot100-1143.最长公共子序列
算法·leetcode·动态规划
政企项目老覃15 小时前
边缘 AI 推理部署:安防零售场景下的模型裁剪与端侧落地实践
人工智能·程序人生·算法·性能优化·vllm
GreenTea16 小时前
发布 3 天登顶 HN:不生成一个字的模型 Jev,我把它的源码和黑料都扒了一遍
前端·后端·算法
庖丁解牛17 小时前
无穷小不是一个“神秘小数”,而是一场奔向 0 的过程
算法