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

相关推荐
啥都鼓捣的小yao1 小时前
Python解决“数字插入”问题
python·算法
qystca2 小时前
蓝桥云客--回文数组
算法
每次的天空2 小时前
Android学习总结之算法篇五(字符串)
android·学习·算法
Fantasydg2 小时前
DAY 37 leetcode 454--哈希表.四数相加
算法·leetcode·散列表
前端 贾公子3 小时前
LeetCode 2442:统计反转后的不同整数数量
算法·leetcode·职场和发展
lmy201211083 小时前
GESP:2025-3月等级8-T1-上学
c++·算法·图论·dijkstra
珊瑚里的鱼3 小时前
第五讲(下)| string类的模拟实现
开发语言·c++·笔记·程序人生·算法·visualstudio·visual studio
工一木子4 小时前
大厂算法面试 7 天冲刺:第6天-树与图深度剖析——高频算法面试题 & Java 实战
java·算法·面试
查理零世4 小时前
【蓝桥杯速成】日期问题(填空题) + 真题讲解 python
python·算法·蓝桥杯
杰克逊的日记4 小时前
大语言模型应用和训练(人工智能)
人工智能·算法·语言模型