12. Integer to Roman
2016-06-18 16:04
253 查看
题目:
Given an integer, convert it to a roman numeral.
Input is guaranteed to be within the range from 1 to 3999.
题意:
给定一个整数,将其转换为罗马数字。输入的数字可以保证在1到3999范围内。
思路一:
罗马数字规则:
1, 罗马数字共有7个,即I(1)、V(5)、X(10)、L(50)、C(100)、D(500)和M(1000)。
罗马数字中没有“0”。
2, 重复次数:一个罗马数字最多重复3次。
3, 右加左减:
在较大的罗马数字的右边记上较小的罗马数字,表示大数字加小数字。
在较大的罗马数字的左边记上较小的罗马数字,表示大数字减小数字。
4, 左减的数字有限制,仅限于I、X、C,且放在大数的左边只能用一个。
(*) V 和 X 左边的小数字只能用Ⅰ。
(*) L 和 C 左边的小数字只能用X。
(*) D 和 M 左 边的小数字只能用C。
题目所知,最大整数为3999,所以将整数按照千位,百位,十位,个位分离出来之后单独转换,之后拼接到一起。
代码:10ms
public class Solution {
public String intToRoman(int num) {
String M[] = {"", "M", "MM", "MMM"};
String C[] = {"", "C", "CC", "CCC", "CD", "D", "DC", "DCC", "DCCC", "CM"};
String X[] = {"", "X", "XX", "XXX", "XL", "L", "LX", "LXX", "LXXX", "XC"};
String I[] = {"", "I", "II", "III", "IV", "V", "VI", "VII", "VIII", "IX"};
return M[num/1000] + C[(num%1000)/100] + X[(num%100)/10] + I[num%10];
}
}
思路二:
将整数分等级相比,如果大于就多拼一个罗马字符。
代码:36ms
class Solution {
public:
string intToRoman(int num) {
string str;
string symble[] = {"M","CM","D","CD","C","XC","L","XL","X","IX","V","IV","I"};
int value[] = {1000,900,500,400, 100, 90, 50, 40, 10, 9, 5, 4, 1};
for(int i=0; num!=0; ++i){
while(num>=value[i]){
num -= value[i];
str += symble[i];
}
}
return str;
}
};
Given an integer, convert it to a roman numeral.
Input is guaranteed to be within the range from 1 to 3999.
题意:
给定一个整数,将其转换为罗马数字。输入的数字可以保证在1到3999范围内。
思路一:
罗马数字规则:
1, 罗马数字共有7个,即I(1)、V(5)、X(10)、L(50)、C(100)、D(500)和M(1000)。
罗马数字中没有“0”。
2, 重复次数:一个罗马数字最多重复3次。
3, 右加左减:
在较大的罗马数字的右边记上较小的罗马数字,表示大数字加小数字。
在较大的罗马数字的左边记上较小的罗马数字,表示大数字减小数字。
4, 左减的数字有限制,仅限于I、X、C,且放在大数的左边只能用一个。
(*) V 和 X 左边的小数字只能用Ⅰ。
(*) L 和 C 左边的小数字只能用X。
(*) D 和 M 左 边的小数字只能用C。
题目所知,最大整数为3999,所以将整数按照千位,百位,十位,个位分离出来之后单独转换,之后拼接到一起。
代码:10ms
public class Solution {
public String intToRoman(int num) {
String M[] = {"", "M", "MM", "MMM"};
String C[] = {"", "C", "CC", "CCC", "CD", "D", "DC", "DCC", "DCCC", "CM"};
String X[] = {"", "X", "XX", "XXX", "XL", "L", "LX", "LXX", "LXXX", "XC"};
String I[] = {"", "I", "II", "III", "IV", "V", "VI", "VII", "VIII", "IX"};
return M[num/1000] + C[(num%1000)/100] + X[(num%100)/10] + I[num%10];
}
}
思路二:
将整数分等级相比,如果大于就多拼一个罗马字符。
代码:36ms
class Solution {
public:
string intToRoman(int num) {
string str;
string symble[] = {"M","CM","D","CD","C","XC","L","XL","X","IX","V","IV","I"};
int value[] = {1000,900,500,400, 100, 90, 50, 40, 10, 9, 5, 4, 1};
for(int i=0; num!=0; ++i){
while(num>=value[i]){
num -= value[i];
str += symble[i];
}
}
return str;
}
};
相关文章推荐
- java 枚举 循环遍历以及一些简单常见的使用
- [bzoj3522] [Poi2014]Hotel
- BZOJ3907 网格
- SystemUI下拉通知栏的源码分析,屏蔽通知栏,监听通知栏下拉动作
- 第一个任务--动手写一个网页
- 三分钟教你学会MVC框架——基于java web开发
- 在Linux上,使用MySQL的yum仓库,安装MySQL
- python 跨语言数据交互、json、pickle(序列化)、urllib、requests(爬虫模块)、XML。
- IOS中div contenteditable=true无法输入
- Divide Two Integers
- javascript 解析json数据获取到item和value
- 通往全栈工程师的捷径 —— React
- HTML5 浅谈Jquery中的bind(),live(),delegate(),on()绑定事件方式
- Mysql安装问题
- java设计模式之工厂模式
- 6-18
- 什么是开发框架
- Mac安装cocoapods和使用
- ==和.equals()的区别备忘
- linux下配置nfs服务器以及设置自动挂载(以centos6.7为例)