LeetCode 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到3999的范围内。因为看罗马数字的定义,发现其实如果罗马数字比较大,那么就会出现很复杂的表示形式,所以一般只要确保在1到3999之内就行了。然后这道题的思路采用了一个非常巧妙的解题步骤。因为根据罗马数字的定义格式,

1~9: {"I", "II", "III", "IV", "V", "VI", "VII", "VIII", "IX"};

10~90: {"X", "XX", "XXX", "XL", "L", "LX", "LXX", "LXXX", "XC"};

100~900: {"C", "CC", "CCC", "CD", "D", "DC", "DCC", "DCCC", "CM"};

1000~3000: {"M", "MM", "MMM"}.

那么在3999之内的任何数字的每一位就是在上述四个集合内的合并就行了。所以只要用一个循环去用10去初余就行了,每一次得到一位数字,然后去上面对应的数组中找到对应的字符就行了。

public class Solution 
{
    public static String intToRoman(int num)
	{
		String[][] roman = 
			{  
	            {"", "I", "II", "III", "IV", "V", "VI", "VII", "VIII", "IX"},  
	            {"", "X", "XX", "XXX", "XL", "L", "LX", "LXX", "LXXX", "XC"},  
	            {"", "C", "CC", "CCC", "CD", "D", "DC", "DCC", "DCCC", "CM"},  
	            {"", "M", "MM", "MMM"}  
	        }; 
		 String ret = "";
		 int digit = 0;
		 while(num != 0)
		 {
			 int remain = num % 10;
			 ret = roman[digit][remain] + ret;
			 digit++;
			 num /= 10;
		 }
		 return ret;
	}
}

注意此题与之前的一题,将罗马数字转化为十进制整数有点类似,可以考虑结合下。


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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值