class Solution:
def intToRoman(self, num: int) -> str:
dict = {0:'', 1:'I', 2:'II', 3:'III', 4:'IV', 5:'V', 6:'VI', 7:'VII', 8:'VIII', 9:'IX'}
s = dict[num%10]
temp = (num%100-num%10)//10
if temp < 4:
s = temp*'X' + s
elif temp == 4:
s = 'XL'+ s
elif temp < 9:
s = 'L'+(temp-5)*'X'+s
else:
s = 'XC'+s
temp = (num%1000-num%100)//100
if temp < 4:
s = temp*'C' + s
elif temp == 4:
s = 'CD'+ s
elif temp < 9:
s = 'D'+(temp-5)*'C'+s
else:
s = 'CM'+s
temp = (num%10000-num%1000)//1000
s = temp*'M'+s
return s
法二:简化版
class Solution:
def intToRoman(self, num: int) -> str:
temp_s = ['I','V','X','L','C','D','M']
i=0
s = ''
for j in range(len(str(num))):
temp = num%10
if temp < 4:
s = temp*temp_s[i]+s
elif temp == 4:
s = temp_s[i]+temp_s[i+1]+s
elif temp < 9:
s = temp_s[i+1]+(temp-5)*temp_s[i]+s
else:
s = temp_s[i]+temp_s[i+2]+s
num //=10
i+=2
return s
法三:贪心算法
class Solution:
def intToRoman(self, num: int) -> str:
_nums = [1000,900,500,400,100,90,50,40,10,9,5,4,1]
_romans = ['M','CM','D','CD','C','XC','L','XL','X','IX','V','IV','I']
index = 0
s = ''
while index < 13:
while num >= _nums[index]:
s += _romans[index]
num -= _nums[index]
index += 1
return s