题目:
这道题其实和我之前的一篇文章——罗马数字转整数,有异曲同工之处,如果没有做过的同学,建议先看罗马数字转整数,
附上我的博文链接https://blog.csdn.net/qq_39377543/article/details/104032764
对于这道题,我们必须要先明确一点,我们要从大往小了走,想明白这一点后,解决这道题也就不是什么难事了
class Solution {
public String intToRoman(int num) {
StringBuilder stringBuilder = new StringBuilder();
//定义一个LinkedHashMap,注意是LinkedHashMap!
//LinkedHashMap的Key是有序的,是按照你的存储顺序排列的
Map<Integer,String> map=new LinkedHashMap<Integer, String>() {{
put(1000,"M");
put(900,"CM");
put(500,"D");
put(400,"CD");
put(100,"C");
put(90,"XC");
put(50,"L");
put(40,"XL");
put(10,"X");
put(9,"IX");
put(5,"V");
put(4,"IV");
put(1,"I");
}};
//遍历每一个Key,直到num=0为止
for(int i:map.keySet()){
while(num>=i) {
num-=i;
stringBuilder.append(map.get(i));
}
if(num==0) break;
}
return stringBuilder.toString();
}
}
运行结果如下:
不知道为什么,明明很简单的代码,最后运行效率却极低,也许是Map的原因?如果有大牛知道的话,可以在评论里告诉我,谢谢