LeetCode 012 Integer to Roman

题目


Given an integer, convert it to a roman numeral.

Input is guaranteed to be within the range from 1 to 3999.

把数字变成罗马字符串


思路


1 之前那道题,考虑4,9的特殊情况也能够在逻辑中处理。所以这题目一直卡在这里。当中也写出来,不过ifelse太多,不合适。

2 之后考虑,直接在字典里把所有4,9的情况都写进去,这样一来,逻辑上面的代码容易多了,一劳永逸。

3 逻辑上面,从大到小,对于数,有字符串对应,一直用贪心法完成。

4 用StringBuffer ,不要用String


代码


public class Solution {
    public String intToRoman(int num) {
       if(num < 1 || num > 3999){    
	            return "-1";    
	        }    
	     
	      int[] aArray = {1000,900,500,400,100,90,50,40,10,9,5,4,1};    
	      String[] rArray = {"M","CM","D","CD","C","XC","L","XL","X","IX","V","IV","I"};    
	      StringBuffer rNumber = new StringBuffer();    
	     
	        for(int i=0; i<aArray.length; i++){    
	            while(num >= aArray[i]){    
	                rNumber .append( rArray[i]);    
	                num -= aArray[i];    
	            }    
	        }    
	     
	        return new String(rNumber);
    }
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值