题目:
Roman numerals are represented by seven different symbols: I
, V
, X
, L
, C
, D
and M
.
Symbol Value
I 1
V 5
X 10
L 50
C 100
D 500
M 1000
For example, two is written as II
in Roman numeral, just two one's added together. Twelve is written as, XII
, which is simply X
+ II
. The number twenty seven is written as XXVII
, which is XX
+ V
+ II
.
Roman numerals are usually written largest to smallest from left to right. However, the numeral for four is not IIII
. Instead, the number four is written as IV
. Because the one is before the five we subtract it making four. The same principle applies to the number nine, which is written as IX
. There are six instances where subtraction is used:
I
can be placed beforeV
(5) andX
(10) to make 4 and 9.X
can be placed beforeL
(50) andC
(100) to make 40 and 90.C
can be placed beforeD
(500) andM
(1000) to make 400 and 900.
Given an integer, convert it to a roman numeral. Input is guaranteed to be within the range from 1 to 3999.
Example 1:
Input: 3
Output: "III"
Example 2:
Input: 4
Output: "IV"
Example 3:
Input: 9
Output: "IX"
Example 4:
Input: 58
Output: "LVIII"
Explanation: L = 50, V = 5, III = 3.
Example 5:
Input: 1994
Output: "MCMXCIV"
Explanation: M = 1000, CM = 900, XC = 90 and IV = 4.
描述:
给出一个整数,将其转化为对应的罗马数字,其中罗马数字的转换规则为:
Symbol Value
I 1
V 5
X 10
L 50
C 100
D 500
M 1000
但是对于涉及到4和9的地方,表示方式不同
Symbol Value
IV 4
IX 9
XL 40
XC 90
CD 400
CM 900
分析:
使用最简单粗暴的方法,将各个权重位上数字对应的符号存储到一张表中,再将目标数字按位拆解,最后对每个拆解开的数字都查表其对应的内容,最后合并输出,没有坑点,主要是对下标的控制
另外对于某位上为0的数,没有对应的内容输出
代码:(时间复杂度O(n),空间复杂度O(1))
class Solution {
public:
char sign[4][10][5] = {
{"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 intToRoman(int num) {
int number[4] = {0}, index = 0;
for (int i = 0; num > 0; ++ i) {
number[i] = num % 10;
num /= 10;
++ index;
}
string result;
while (index) {
if (number[index - 1]) {
result = result + sign[index - 1][number[index - 1] - 1];
}
-- index;
}
return result;
}
};