整数转换成罗马数字,自己写了一个,在LeetCode上提交说超时了,又参考别人的做了修改才好,记下来:
package pratice.leetcode; import java.util.*; public class problem12 { public static String intToRoman(int num) { if(num<0||num>3999) return null;
//将对应的存在Map中,会影响运行速度,修改后如下:
/*
String res="";
if(num>=1000){
for(int i=1;i<=num/1000;i++){
res+="M";
}
num=num%1000;
}
if(num>=900){
res+="CM";
num=num-900;
}
if(num>=500){
res+="D";
num=num-500;
}
if(num>=400){
res+="CD");
num=num-400;
}
if(num>=100){
for(int i=1;i<=num/100;i++){
res+="C";
}
num=num%100;
}
if(num>=90){
res+="XC";
num=num-90;
}
if(num>=50){
res+="L";
num=num-50;
}
if(num>=40){
res+="XL";
num=num-40;
}
if(num>=10){
for(int i=1;i<=num/10;i++){
res+="X";
}
num=num%10;
}
if(num==9){
res+="IX";
return res;
}
if(num>=5){
res+="V";
num=num-5;
}
if(num==4){
res+="IV";
return res;
}
if(num>=1){
for(int i=1;i<=num/1;i++){
res+="I";
}
num=num%1;
}
return res;
*/
Map<Integer,String> map=new HashMap<>(); map.put(1, "I"); map.put(4, "IV"); map.put(5, "V"); map.put(9, "IX"); map.put(10, "X"); map.put(40, "XL"); map.put(50, "L"); map.put(90, "XC"); map.put(100, "C"); map.put(400, "CD"); map.put(500, "D"); map.put(900, "CM"); map.put(1000, "M"); String res=""; if(num>=1000){ for(int i=1;i<=num/1000;i++){ res+=map.get(1000); } num=num%1000; } if(num>=900){ res+=map.get(900); num=num-900; } if(num>=500){ res+=map.get(500); num=num-500; } if(num>=400){ res+=map.get(400); num=num-400; } if(num>=100){ for(int i=1;i<=num/100;i++){ res+=map.get(100); } num=num%100; } if(num>=90){ res+=map.get(90); num=num-90; } if(num>=50){ res+=map.get(50); num=num-50; } if(num>=40){ res+=map.get(40); num=num-40; } if(num>=10){ for(int i=1;i<=num/10;i++){ res+=map.get(10); } num=num%10; } if(num==9){ res+=map.get(9); return res; } if(num>=5){ res+=map.get(5); num=num-5; } if(num==4){ res+=map.get(4); return res; } if(num>=1){ for(int i=1;i<=num/1;i++){ res+=map.get(1); } num=num%1; } return res; } public static void main(String[] args){ int num=2; System.out.println(intToRoman(num)); } }