暴力匹配(Java)
核心思想: 太暴力了
class Solution {
public String intToRoman(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"};//个位可能对应的罗马字符
StringBuilder sb = new StringBuilder();
sb.append(thousands[num / 1000 % 10]);//千位
sb.append(hundreds[num / 100 % 10]);//百位
sb.append(tens[num / 10 % 10]);//十位
sb.append(ones[num % 10]);//个位
return sb.toString();
}
}
枚举匹配(Java)
核心思想: 枚举可能的罗马字符及其对应的整数(不超过num的最大整数),通过待转整数num依次和不超过num的最大整数相减得到对应的罗马字符,最后通过StringBuilder对象拼接。
class Solution {
public String intToRoman(int num) {
String[] romans = {"M","CM","D","CD","C","XC","L","XL","X","IX","V","IV","I"};//枚举可能的罗马字符
int[] digits = {1000,900,500,400,100,90,50,40,10,9,5,4,1};//枚举可能的罗马字符对应的整数
StringBuilder sb = new StringBuilder();
for(int i = 0; i < romans.length; i++){
//循环拼接不超过num的最大整数对应的罗马字符
while(num >= digits[i]){
sb.append(romans[i]);
num -= digit[i];
}
}
return sb.toString();
}
}