[leetcode]12. Integer to Roman
来源:互联网 发布:js对象循环引用 编辑:程序博客网 时间:2024/05/17 07:27
Given an integer, convert it to a roman numeral.
Input is guaranteed to be within the range from 1 to 3999.
->Roman数字计算规则:
基本字符有7个:I,V,X,L,C,D,M,分别表示1,5,10,50,100,500,1000。
在构成数字的时候,有下列规则:
1、相同的数字连写,所表示的数等于这些数字相加得到的数,如:Ⅲ = 3;
2、小的数字在大的数字的右边,所表示的数等于这些数字相加得到的数, 如:Ⅷ = 8;Ⅻ = 12;
3、小的数字,(限于Ⅰ、X 和C)在大的数字的左边,所表示的数等于大数减小数得到的数,如:Ⅳ= 4;Ⅸ= 9;
4、正常使用时,连写的数字重复不得超过三次。
->思路1:1000的数字单独考虑{1000,2000,3000}对应{M,MM,MMM};100对应{C,CC,CCC,CD,D,DC,DCC,DCCC,CM},10对应{X,XX,XXX,XL,L,LX,LXX,LXXX,XC},所以对于个位,十位和百位,可以分以下几种情况进行考虑:{0,1,2,3} {4} {5,6,7,8} {9}
代码如下:
char* intToRoman(int num) { char Roman[7]={'I','V','X','L','C','D','M'}; char* result = (char*)malloc(15*sizeof(char)); int flag=1000; int tmp=num/flag; //1000 if( tmp != 0) { for(int i=0; i<tmp ;i++) result[i]=Roman[6]; } int length=tmp; int index = 6; while(num>0) { num = num - flag*tmp; flag = flag/10; if(flag==0) flag=1; tmp = num/flag; index = index-2; if(tmp < 4) { for(int i=0; i<tmp ;i++) result[length+i]=Roman[index]; length = length+tmp; } if(tmp ==4) { result[length+0]=Roman[index]; result[length+1]=Roman[index+1]; length = length+2; } if((tmp>4)&&(tmp<9)) { result[length+0]=Roman[index+1]; for(int i=1; i<tmp-4; i++) { result[length+i]=Roman[index]; } length = length+tmp-4; } if(tmp==9) { result[length+0]=Roman[index]; result[length+1]=Roman[index+2]; length = length+2; } } for(int i=length; i<15; i++) { result[i]=NULL; } return result;}
->思路2:以上的代码执行后只超过了10%的用户,查看别人的代码,有一个比较好的思路,分别列出来1,4,9的罗马数字表示,找到比输入字符小的最大的罗马数字,将输入字符减该罗马数字,直至为0
0 0
- LeetCode 12. Integer to Roman
- [LeetCode]12.Integer to Roman
- LeetCode --- 12. Integer to Roman
- [Leetcode] 12. Integer to Roman
- [leetcode] 12.Integer to Roman
- leetcode 12. Integer to Roman
- leetcode 12. Integer to Roman
- [LeetCode]12. Integer to Roman
- leetcode 12. Integer to Roman
- LeetCode *** 12. Integer to Roman
- LeetCode 12. Integer to Roman
- leetcode 12. Integer to Roman
- leetcode 12. Integer to Roman
- Leetcode 12. Integer to Roman
- [Leetcode] 12. Integer to Roman
- leetcode 12. Integer to Roman
- 【leetcode】12. Integer to Roman
- Leetcode-12. Integer to Roman
- CKEditor上传视频(java)
- array.copyWithin
- GitHub Android Libraries Top 100 简介
- 代码重构-改善代码设计(图文+代码)
- Java中的数据类型
- [leetcode]12. Integer to Roman
- JavaScript数组
- android中Timer
- 深入浅出RxJava(二:操作符)
- 微信支付接口调用问题(android正常,iphone调不起)
- 数据结构课程设计《火车售票管理系统》
- 世界名校网络公开课
- 安卓开源项目周报1227
- java的哈希排序