LeetCode Integer to Roman
2015-11-05 11:07
288 查看
题目:
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;
}
}
注意此题与之前的一题,将罗马数字转化为十进制整数有点类似,可以考虑结合下。
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;
}
}
注意此题与之前的一题,将罗马数字转化为十进制整数有点类似,可以考虑结合下。
相关文章推荐
- python线程锁
- poj 1237 The Postal Worker Rings Once floyd算法水题
- React-Native学习指南
- Algorithm Gossip: 背包问题(Knapsack Problem)
- NSURLConnection的简单使用
- java中怎么判断一个字符串中包含某个字符或字符串
- angularjs的$on、$emit、$broadcast
- js原生设计模式——4安全的工厂方法模式之Factory方法模式
- jQuery-1.9.1源码分析系列(二)jQuery选择器续2——筛选
- Swift学习-基础的语法
- 写给刚工作的同学们的一些话
- iphone常用控件之UIScrollView
- VB6 获取和设置默认打印机
- Javascript的操作符
- js原生设计模式——4安全的工厂方法模式之oop编程增强版
- 我的永久性添加Hidden Markov Model(hmm)
- 如何删掉工程中DerivedData
- jar文件
- 小马哥---高仿华为p7- L07 型号X5 6582芯片刷机拆机主板图与机型开机图 X5第三个版本
- 基于UDP的手机与电脑互相通信的简单实例