Integer to Roman
题目描述
Given an integer, convert it to a roman numeral.
Input is guaranteed to be within the range from 1 to 3999.
解题方法
1、罗马数字共有7个,即I(1)、V(5)、X(10)、L(50)、C(100)、D(500)和M(1000)。
2、左减右加逻辑,以及右加不能超过三位,左减只能有1位。
- addtion notation的表达方法基本就是分隔的将单独的value加起来
- substract notation的表达方法是两个字符代表一个数,能够代表的数也是有限的
所以我们可以将能够单独表达的数字列出来
1000 900 500 400 100 90 50 40 10 9 5 4 1
罗马数字基本是从左到右,从大到小排列的,所以按照这个value array来做greedy判断,就可以得到结果
Solution
class Solution(object):
def intToRoman(self, num):
"""
:type num: int
:rtype: str
"""
if not num:
return ""
values = [1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1]
symbols = ["M", "CM", "D", "CD", "C", "XC", "L", "XL", "X", "IX", "V", "IV", "I"]
index = 0
result = ""
while num:
cur = num / values[index]
for j in range(cur):
result += symbols[index]
num %= values[index]
index += 1
return result