12. 整数转罗马数字 - 力扣(LeetCode)
可以结合13题一起看
今天刷整数转罗马数字,大家有兴趣可以点上看看题目要求,试着做一下。
我们直接看题解吧:
方法1,模拟/贪心算法
方法2,暴力匹配,即由于题目说输入的范围1~3999,因此1~9,10~90,100~900,1000~3000所对应的罗马数字写出来,然后计算匹配
审题目+事例+提示:
思路(模拟/贪心算法):
定义两个数组,value和label,分别存储对应的阿拉伯数字与罗马数字
双层循环,
第一层,遍历
第二层,判断
·若num 大于value某个数字,就追加对应的罗马数字
并减去对应的阿拉伯数字。
若num等于0则提前跳出循环
代码:
class Solution {
public String intToRoman(int num) {
int[] value = {1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1};
String[] label = {"M", "CM", "D", "CD", "C", "XC", "L", "XL", "X", "IX", "V", "IV", "I"};
int n = value.length;
StringBuilder sb = new StringBuilder();
for (int i = 0; i < n; i++) {
while (num >= value[i]) {
sb.append(label[i]);
num -= value[i];
}
if (num == 0) {
break;
}
}
return sb.toString();
}
}
注意:StringBuilder定义、使用
代码(暴力匹配):
class Solution {
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"};
public String intToRoman(int num) {
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();
}
}