您的位置:首页 > 其它

[LeetCode] 12. Integer to Roman 整数转为罗马数字

2018-03-02 14:51 495 查看

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 before 
    V
     (5) and 
    X
     (10) to make 4 and 9. 
  • X
     can be placed before 
    L
     (50) and 
    C
     (100) to make 40 and 90. 
  • C
     can be placed before 
    D
     (500) and 
    M
     (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: C = 100, L = 50, XXX = 30 and III = 3.

Example 5:

Input: 1994
Output: "MCMXCIV"
Explanation: M = 1000, CM = 900, XC = 90 and IV = 4.

将阿拉伯整数转为罗马数字,首先要对罗马数字有了解,找到两种数字转换的规律,然后用一个Hash map来保存这些规律,然后把整数进行相应的转换。输入数字的范围(1 - 3999)。

Java:

public static 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];
}  

Java:

public class Solution {
public String intToRoman(int number) {
int[] values = {1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1 };
String[] numerals = {"M", "CM", "D", "CD", "C", "XC", "L", "XL", "X", "IX", "V", "IV", "I" };
StringBuilder result = new StringBuilder();
for (int i = 0; i < values.length; i++) {
while (number >= values[i]) {
number -= values[i];
result.append(numerals[i]);
}
}
return result.toString();
}
} 

Python:

class Solution(object):
def intToRoman(self, num):
"""
:type num: int
:rtype: str
"""
numeral_map = {1: "I", 4: "IV", 5: "V", 9: "IX", \
10: "X", 40: "XL", 50: "L", 90: "XC", \
100: "C", 400: "CD", 500: "D", 900: "CM", \
1000: "M"}
keyset, result = sorted(numeral_map.keys()), []

while num > 0:
for key in reversed(keyset):
while num / key > 0:
num -= key
result += numeral_map[key]

return "".join(result)  

C++:

class Solution {
public:
string intToRoman(int num) {
const vector<int> nums{1000, 900, 500, 400, 100, 90,
50, 40, 10, 9, 5, 4, 1};
const vector<string> romans{"M", "CM", "D", "CD", "C", "XC", "L",
"XL", "X", "IX", "V", "IV", "I"};

string result;
int i = 0;
while (num > 0) {
int times = num / nums[i];
while (times--) {
num -= nums[i];
result.append(romans[i]);
}
++i;
}
return result;
}
};

  

类似题目:

[LeetCode] 13. Roman to Integer 罗马数字转为整数  

 

 

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: