示例 1:
输入: num = 3
输出: "III"
示例 2:
输入: num = 4
输出: "IV"
示例 3:
输入: num = 9
输出: "IX"
示例 4:
输入: num = 58
输出: "LVIII"
解释: L = 50, V = 5, III = 3.
示例 5:
输入: num = 1994
输出: "MCMXCIV"
解释: M = 1000, CM = 900, XC = 90, IV = 4.
提示:
1 <= num <= 3999
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/integer-to-roman
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
我的解法:
直接用字典的形式存储然后逐位输出
class Solution:
def intToRoman(self, num: int) -> str:
num_dict = {1: "I", 2: "II", 3: "III", 4: "IV", 5: "V", 6: "VI", 7: "VII", 8: "VIII", 9: "IX", 10: "X",
20: "XX", 30: "XXX",
40: "XL", 50: "L", 60: "LX", 70: "LXX", 80: "LXXX", 90: "XC", 100: "C", 200: "CC", 300: "CCC",
400: "CD", 500: "D", 600: "DC", 700: "DCC", 800: "DCCC",
900: "CM", 1000: "M", 2000: "MM", 3000: "MMM"}
result_str=""
if num>=1000:
int_part=num//1000*1000
num=num%1000
result_str+=num_dict.get(int_part)
if num>=100:
int_part=num//100*100
num=num%100
result_str+=num_dict.get(int_part)
if num>=10:
int_part=num//10*10
num=num%10
result_str+=num_dict.get(int_part)
if num>=1:
int_part=num
result_str+=num_dict.get(int_part)
return result_str
标准解法:
class Solution:
def intToRoman(self, num: int) -> str:
re = ''
if num // 1000 >0:
re += 'M'*(num//1000)
num = num%1000
if num // 100 > 0:
a = num // 100
if 1<= a <= 3:
re += 'C'*a
if a == 4:
re += 'CD'
if 5 <= a <= 8:
re += 'D' + 'C'*(a-5)
if a == 9:
re += 'CM'
num = num % 100
if num // 10 > 0:
a = num // 10
if 1<= a <= 3:
re += 'X'*a
if a == 4:
re += 'XL'
if 5 <= a <= 8:
re += 'L' + 'X'*(a-5)
if a == 9:
re += 'XC'
num = num % 10
if num > 0:
a = num
if 0< a < 4:
re += 'I'*a
if a == 4:
re += 'IV'
if 5 <= a <= 8:
re += 'V' + 'I'*(a-5)
if a == 9:
re += 'IX'
return re