1. 程式人生 > 其它 >LeetCode第十二題—Python版本

LeetCode第十二題—Python版本

技術標籤: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))