LeetCode第十二題—Python版本
阿新 • • 發佈:2021-01-20
技術標籤:LeetCodepythonleetcode演算法資料結構
title: LeetCode No.12
categories:
- OJ
- LeetCode
tags:
- Programing
- LeetCode
- OJ
LeetCode第十二題
題目描述
羅馬數字包含以下七種字元:I,V,X,L,C,D和M。
字元 數值
I 1
V 5
X 10
L 50
C 100
D 500
M 1000
例如, 羅馬數字 2 寫做II,即為兩個並列的 1。12 寫做XII,即為X+II。 27 寫做XXVII, 即為XX+V+II。
通常情況下,羅馬數字中小的數字在大的數字的右邊。但也存在特例,例如 4 不寫做IIII,而是IV。數字 1 在數字 5 的左邊,所表示的數等於大數 5 減小數 1 得到的數值 4 。同樣地,數字 9 表示為IX。這個特殊的規則只適用於以下六種情況:
I可以放在V(5) 和X(10) 的左邊,來表示 4 和 9。
X可以放在L(50) 和C(100) 的左邊,來表示 40 和90。
C可以放在D(500) 和M(1000) 的左邊,來表示400 和900。
給定一個整數,將其轉為羅馬數字。輸入確保在 1到 3999 的範圍內。
示例1: 輸入:3 輸出: "III" 示例2: 輸入:4 輸出: "IV" 示例3: 輸入:9 輸出: "IX" 示例4: 輸入:58 輸出: "LVIII" 解釋: L = 50, V = 5, III = 3. 示例5: 輸入:1994 輸出: "MCMXCIV" 解釋: M = 1000, CM = 900, XC = 90, IV = 4.
程式碼
class Solution(object): def intToRoman(self, num): """ :type num: int :rtype: str """ # 列舉出所有特殊情況:列出特殊情況,而對於其他情況則可以用使用迴圈處理 dictList = ['I','IV','V','IX','X','XL','L','XC','C','CD','D','CM','M'] # 特殊規則字元 numList = [1,4,5,9,10,40,50,90,100,400,500,900,1000] # 特殊規則數字 result = '' for i in range(len(dictList)): while num >= numList[len(dictList) - i - 1]: # 要從後往前處理,這樣才能保證IV 在 I之前出現 num -= numList[len(dictList) - i - 1] result += dictList[len(dictList) - i - 1] return result if __name__ == '__main__': s = Solution() print(s.intToRoman(2018))