1. 思路
罗马数字的转换可以通过贪心算法来实现。我们可以按照罗马数字的规则,从大到小依次匹配并减去对应的值,直到 num 变为 0。
2. 解题方法
- 初始化一个 StringBuilder 用于存储转换后的罗马数字。
- 枚举所有的罗马数字符号,按照从大到小的顺序进行匹配:
- 如果当前数字大于等于当前符号对应的值,则将对应的符号添加到 StringBuilder 中,并从 num 中减去对应的值。
- 重复步骤 2 直到 num 变为 0。
- 返回 StringBuilder 转换为的字符串。
3. 复杂度
- 时间复杂度:O(1),因为罗马数字的数量有限,不随输入变化而变化。
- 空间复杂度:O(1),只需要常数级别的额外空间。
4. Code
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面试宝典,有兴趣的读者姥爷可以私信我领取!!!免费滴)