学习时间:
2023年1月28日
题目描述:

题解分享:
/**
* @ Author 繁华倾夏
* @ Date 2023年01月27日
*/
// 力扣(LeetCode):12. 整数转罗马数字
public class Solution {
// 方法一:模拟
public static String intToRoman1(int num) { // 调用函数
int[] values = {1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1};
String[] symbols = {"M", "CM", "D", "CD", "C", "XC", "L", "XL", "X", "IX", "V", "IV", "I"};
StringBuffer roman = new StringBuffer(); // StringBuffer() 构造一个空的字符串缓冲区,并且初始化为 16 个字符的容量
for (int i = 0; i < values.length; ++i) { // 遍历
int value = values[i];
String symbol = symbols[i];
while (num >= value) { // 当num大于value时
num -= value; // 要除尽
roman.append(symbol); // 复制
}
if (num == 0) { // 当num为0时结束
break;
}
}
return roman.toString(); // 返回
}
// 方法二:硬编码
public static String intToRoman2(int num) {
String[] thousands = {"", "M", "MM", "MMM"};
String[] hundreds = {"", "C", "CC", "CCC", "CD", "D", "DC", "DCC", "DCCC", "CM"};
String[] tens = {"", "X", "XX", "XXX", "XL", "L", "LX", "LXX", "LXXX", "XC"};
String[] ones = {"", "I", "II", "III", "IV", "V", "VI", "VII", "VIII", "IX"};
StringBuffer roman = new StringBuffer();
roman.append(thousands[num / 1000]);
roman.append(hundreds[num % 1000 / 100]);
roman.append(tens[num % 100 / 10]);
roman.append(ones[num % 10]);
return roman.toString();
}
// 测试用例
// 输入 num = 3
// 输出 "III"
public static void main(String[] args) {
int num=3;
String re1=intToRoman1(num);
String re2=intToRoman2(num);
System.out.println(re1);
System.out.println(re2);
}
}
【繁华倾夏】【每日力扣题解分享】【Day14】