leetcode:Integer to Roman(整数转化为罗马数字)
2013-10-07 01:43
525 查看
Question:
Given an integer, convert it to a roman numeral.
Input is guaranteed to be within the range from 1 to 3999.
给你一个整数,把它转化为罗马数字,输入保证在1到3999之间。
关于罗马数字介绍:
1、计数方法:① 罗马数字就有下面七个基本符号:Ⅰ(1)、Ⅴ(5)、Ⅹ(10)、L(50)、C(100)、D(500)、M(1000)。
② 相同的数字连写,所表示的数等于这些数字相加得到的数,如:Ⅲ = 3;XX=20;CC=200;MMM=3000;
③ 小的数字在大的数字的右边,所表示的数等于这些数字相加得到的数, 如:Ⅷ = 8;Ⅻ = 12;
④ 小的数字,(限于Ⅰ、X 和C)在大的数字的左边,所表示的数等于大数减小数得到的数,如:Ⅳ= 4;Ⅸ= 9;
⑤ 正常使用时连写的数字重复不得超过三次;
2、组数规则: ① 基本数字Ⅰ、X 、C 中的任何一个,自身连用构成数目,或者放在大数的右边连用构成数目,都不能超过三个;放在大数的左边只能用一个。
② 不能把基本数字V 、L 、D 中的任何一个作为小数放在大数的左边采用相减的方法构成数目;放在大数的右边采用相加的方式构成数目;
③ V 和X 左边的小数字只能用Ⅰ。
④ L 和C 左边的小数字只能用X。
⑤ D 和M 左边的小数字只能用C。
3、对照举例: ① 个位举例:Ⅰ,1 】Ⅱ,2】 Ⅲ,3】 Ⅳ,4 】Ⅴ,5 】Ⅵ,6】Ⅶ,7】 Ⅷ,8 】Ⅸ,9 】
② 十位举例:Ⅹ,10】 Ⅺ,11 】Ⅻ,12】 XXXV,35 】XXXIX,39】 XL,40】 L,50 】LI,51】 LV,55】 XC,90 】XCIII,93】 XCV,95 】XCVIII,98】
③ 百位举例:C,100】 CC,200 】CCC,300 】CD,400】 D,500 】DC,600 】DCC,700】 DCCC,800 】CM,900】 CMXCIX,999】
④ 千位举例:M,1000】 MC,1100 】MCD,1400 】MD,1500 】MDC,1600 】 MCMXC,1990 】MM,2000 】MMMCMXCIX,3999
算法基本思想: 这个题仅仅要求到3999比较简单,根据罗马数字的构建数字的规则,无论个位十位百位还是千位都有相同的构造方法,但是所表示的字母是不同的,所以我想到去写一个函数,public String intToCharacter(int n,int i),n表示数位上的数字,i表示要转化的整数从右到左第几位,这个函数可以把单独的数字转化成罗马字母,在public String intToRoman(int num) 函数中,传入要转化的整数num,然后依次从右向左取出各位,依次求相应罗马数字,并进行字符串拼接,就能得到所需要的结果。
代码实现(java):
Given an integer, convert it to a roman numeral.
Input is guaranteed to be within the range from 1 to 3999.
给你一个整数,把它转化为罗马数字,输入保证在1到3999之间。
关于罗马数字介绍:
1、计数方法:① 罗马数字就有下面七个基本符号:Ⅰ(1)、Ⅴ(5)、Ⅹ(10)、L(50)、C(100)、D(500)、M(1000)。
② 相同的数字连写,所表示的数等于这些数字相加得到的数,如:Ⅲ = 3;XX=20;CC=200;MMM=3000;
③ 小的数字在大的数字的右边,所表示的数等于这些数字相加得到的数, 如:Ⅷ = 8;Ⅻ = 12;
④ 小的数字,(限于Ⅰ、X 和C)在大的数字的左边,所表示的数等于大数减小数得到的数,如:Ⅳ= 4;Ⅸ= 9;
⑤ 正常使用时连写的数字重复不得超过三次;
2、组数规则: ① 基本数字Ⅰ、X 、C 中的任何一个,自身连用构成数目,或者放在大数的右边连用构成数目,都不能超过三个;放在大数的左边只能用一个。
② 不能把基本数字V 、L 、D 中的任何一个作为小数放在大数的左边采用相减的方法构成数目;放在大数的右边采用相加的方式构成数目;
③ V 和X 左边的小数字只能用Ⅰ。
④ L 和C 左边的小数字只能用X。
⑤ D 和M 左边的小数字只能用C。
3、对照举例: ① 个位举例:Ⅰ,1 】Ⅱ,2】 Ⅲ,3】 Ⅳ,4 】Ⅴ,5 】Ⅵ,6】Ⅶ,7】 Ⅷ,8 】Ⅸ,9 】
② 十位举例:Ⅹ,10】 Ⅺ,11 】Ⅻ,12】 XXXV,35 】XXXIX,39】 XL,40】 L,50 】LI,51】 LV,55】 XC,90 】XCIII,93】 XCV,95 】XCVIII,98】
③ 百位举例:C,100】 CC,200 】CCC,300 】CD,400】 D,500 】DC,600 】DCC,700】 DCCC,800 】CM,900】 CMXCIX,999】
④ 千位举例:M,1000】 MC,1100 】MCD,1400 】MD,1500 】MDC,1600 】 MCMXC,1990 】MM,2000 】MMMCMXCIX,3999
算法基本思想: 这个题仅仅要求到3999比较简单,根据罗马数字的构建数字的规则,无论个位十位百位还是千位都有相同的构造方法,但是所表示的字母是不同的,所以我想到去写一个函数,public String intToCharacter(int n,int i),n表示数位上的数字,i表示要转化的整数从右到左第几位,这个函数可以把单独的数字转化成罗马字母,在public String intToRoman(int num) 函数中,传入要转化的整数num,然后依次从右向左取出各位,依次求相应罗马数字,并进行字符串拼接,就能得到所需要的结果。
代码实现(java):
class Solution { public String intToRoman(int num) { String str=""; int i=1,n; //i表示从右到左整数第几位 while(num>0){ n=num%10; //表示数位上的数字 num/=10; str=intToCharacter(n, i).concat(str); //把每一位返回的字符串和str相连 i++; } return str; } public String intToCharacter(int n,int i){//n表示特定的输入,i表示个位十位百位或者千位 String str1,str2,str3;//拿0~9之间的数举例,str1表示I,str2表示V,str3表示X String str="";//这个函数返回特定位上的罗马数字表示形式 if(1==i){ //下面if语句是判断n是哪一位上的,依次用罗马数字表示1、5、10 str1="I"; //个位上的数 str2="V"; str3="X"; } else if(2==i){ str1="X"; //十位上的数 str2="L"; str3="C"; }else if(3==i){ str1="C"; //百位上的数 str2="D"; str3="M"; }else{ str1="M"; //千位上的数,因为最大数到3999,所以str2和str3为空 str2=""; str3=""; } switch(n){ //switch对各数字进行组合以个位上的数举例如下 case 0:break; //空 case 1:str+=str1;break; //I case 2:str+=str1+str1;break; //II case 3:str+=str1+str1+str1;;break;//III case 4:str+=str1+str2;break; //IV case 5:str+=str2;break; //V case 6:str+=str2+str1;break; //VI case 7:str+=str2+str1+str1;break; //VII case 8:str+=str2+str1+str1+str1;break; //VIII case 9:str+=str1+str3;break; //IX } return str; } }
相关文章推荐
- LeetCode--Roman to Integer 罗马数字转化成整数
- [LeetCode] Integer to Roman 整数转化成罗马数字
- [LeetCode] Roman to Integer 罗马数字转化成整数
- [LeetCode]12. Integer to Roman(整数转化为罗马数字)
- 【LeetCode-面试算法经典-Java实现】【013-Roman to Integer (罗马数字转成整数)】
- Leetcode 13 Roman to Integer 罗马数字转整数
- LeetCode 12 Integer to Roman (整数转罗马数字)
- Roman to Integer 罗马数字转化成整数
- (LeetCode) Roman to Integer --- 罗马数字转整数
- Roman to Integer 罗马数字转化为整数
- [Leetcode] Roman to integer 罗马数字转成整数
- [LintCode] Roman to Integer 罗马数字转化成整数
- leetCode 12.Integer to Roman (整数转罗马数字) 解题思路和方法
- Roman to Integer 罗马数字转化成整数
- LeetCode | Integer to Roman(整数转换成罗马数字)
- leetcode-12. Integer to Roman(整数转换成罗马数字)
- [LeetCode] Roman to Integer 罗马数字转整数
- [C++]LeetCode 12: Integer to Roman(将整数转换为罗马数字)
- LeetCode OJ 之 Integer to Roman (整数转化为罗马数字)
- [Leetcode] Interger to roman 整数转成罗马数字