算法:
【贪心算法】
ans = ''
for item in character键的集合 from 最大 to 最小:
num 为 0:
结束,退出循环
num 不为 0:
if item <= num:
计算需要的个数 cnt = num // item
更新 num -= cnt * item
更新 ans += cnt * item 对应的值
else:
continue
时间复杂度:仅需遍历一次dict即可结束,故为O(1)。
空间复杂度:使用的内存不会随着输入整数的大小而改变,故为O(1)。
代码:
character = {1000: 'M', 900: 'CM', 500: 'D', 400: 'CD', 100: 'C', 90: 'XC',50: 'L', 40: 'XL', 10: 'X', 9: 'IX', 5: 'V', 4: 'IV', 1: 'I'}
def romanToInt(num: int) -> str:
ans = ''
for item in character.keys():
if num <= 0:
break
if item <= num:
ans += character[item] * (num // item)
num -= (num // item) * item
# print(ans)
return ans
代码优化:
def romanToInt(num: int) -> str:
ans = ''
for item in character.keys():
if num <= 0:
break
if item <= num:
cnt, num = divmod(num, item) # 使用内部函数简化代码(但经测试运行速度不及前一个版本)
ans += cnt * character[item]
# print(ans)
return ans
心得:
1、divmod(a, b) 函数返回值为元组(a // b, a % b)