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面试宝典,有兴趣的读者姥爷可以私信我领取!!!免费滴)

相关推荐
xlp666hub27 分钟前
Leetcode第五题:用C++解决盛最多水的容器问题
linux·c++·leetcode
CoovallyAIHub1 小时前
9个视觉语言模型工厂实测:Qwen 87.9%碾压全场,你的显卡能跑哪个?
算法
SparkX开源AI知识库2 小时前
手摸手带你安装OpenClaw并对接飞书
算法·架构
一语07162 小时前
3分钟搞懂深度学习AI:实操篇:卷积层
人工智能·算法
CoovallyAIHub21 小时前
181小时视频丢给GPT-5,准确率只有15%——南大联合NVIDIA等五校发布多模态终身理解数据集
深度学习·算法·计算机视觉
CoovallyAIHub1 天前
CVPR 2026 | GS-CLIP:3D几何先验+双流视觉融合,零样本工业缺陷检测新SOTA,四大3D工业数据集全面领先!
深度学习·算法·计算机视觉
xlp666hub1 天前
Leetcode 第三题:用C++解决最长连续序列
c++·leetcode
有意义1 天前
深度拆解分割等和子集:一维DP数组与倒序遍历的本质
前端·算法·面试
xlp666hub1 天前
Leetcode第二题:用 C++ 解决字母异位词分组
c++·leetcode