Problem12:intToRoman

整数转换成罗马数字,自己写了一个,在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));
	}
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值