题目:力扣https://leetcode-cn.com/problems/integer-to-roman/
class Solution {
public String intToRoman(int num) {
int temp;
StringBuilder str = new StringBuilder();
int[] value ={1000,900,500,400,100,90,50,40,10,9,5,4,1};
String[] rome = {"M","CM","D","CD","C","XC","L","XL","X","IX","V","IV","I"};
for(int i=0;i<value.length;i++){
int count = num/value[i];
num = num-count*value[i];
while(count>0){
str.append(rome[i]);
count--;
}
}
String ans = str.toString();
return ans;
}
}
思路:这又是一道我一次就AC的中等题,而且最后执行效果挺可观。解题思路是,先用一个int数组装下所有可以用单个罗马数字(特殊组合也算,例如:IV、IX、XL...)表示的数值,再用一个String数值按照int数组的数值的顺序,一一对应地填入罗马数字。然后用循环,让x分别除各个特殊数值(即int数组内的各个元素),并利用StringBuilder记录对应的罗马数字。最后将StringBuilder类型转化成为String类型返回即可。
1.声明。声明一个StringBuilder类型的对象str,一个特殊值int数组,一个罗马数字String数组。
StringBuilder str = new StringBuilder();
int[] value ={1000,900,500,400,100,90,50,40,10,9,5,4,1};
String[] rome = {"M","CM","D","CD","C","XC","L","XL","X","IX","V","IV","I"};
2.逐个数位转换罗马数字。count是用于判断该数位需要多少个罗马字符表示,num是表示下一数位需要判断的数值大小,最后通过append()的方式填入罗马字符。
for(int i=0;i<value.length;i++){
int count = num/value[i];
num = num-count*value[i];
while(count>0){
str.append(rome[i]);
count--;
}
}
3.经过上述循环,罗马数字已经完全写入StringBuilder类型的对象str中,通过.toString的方法将其转换为String类型并返回即可。
String ans = str.toString();
return ans;