算法:
【貪心算法】
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)