推特2021算法面试真题:整数转罗马数字
描述
给定一个整数,将其转换成罗马数字。
保证给定的整数在1到3999的范围内。
什么是 罗马数字?
- https://en.wikipedia.org/wiki/Roman_numerals
- https://zh.wikipedia.org/wiki/%E7%BD%97%E9%A9%AC%E6%95%B0%E5%AD%97
- http://baike.baidu.com/view/42061.htm
样例1
输入: 1
输出: "I"
样例 2:
输入: 99
输出: "XCIX"
解题思路
根据罗马数字的计数规则进行转换即可.
源代码
class Solution:
def parse(self, digit, index):
NUMS = {
1: 'I',
2: 'II',
3: 'III',
4: 'IV',
5: 'V',
6: 'VI',
7: 'VII',
8: 'VIII',
9: 'IX',
}
ROMAN = {
'I': ['I', 'X', 'C', 'M'],
'V': ['V', 'L', 'D', '?'],
'X': ['X', 'C', 'M', '?']
}
s = NUMS[digit]
return s.replace('X', ROMAN['X'][index]).replace('I', ROMAN['I'][index]).replace('V', ROMAN['V'][index])
# @param {integer} num
# @return {string}
def intToRoman(self, num):
s = ''
index = 0
while num != 0:
digit = num % 10
if digit != 0:
s = self.parse(digit, index) + s
num = num / 10
index += 1
return s