【leetcode】Roman to Integer

題目描述:

Given a roman numeral, convert it to an integer.code

Input is guaranteed to be within the range from 1 to 3999.it

解題思路:

首先咱們要了解羅馬數字怎麼寫的
個位數舉例
I, 1 】II, 2】 III, 3】 IV, 4 】V, 5 】VI, 6】 VII, 7】 VIII,8 】IX, 9io

·十位數舉例
X, 10】 XI, 11 】XII, 12】 XIII, 13】 XIV, 14】 XV, 15 】XVI, 16 】XVII, 17 】XVIII, 18】 XIX, 19】 XX, 20】 XXI, 21 】XXII, 22 】XXIX, 29】 XXX, 30】 XXXIV, 34】 XXXV, 35 】XXXIX, 39】 XL, 40】 L, 50 】LI, 51】 LV, 55】 LX, 60】 LXV, 65】 LXXX, 80】 XC, 90 】XCIII, 93】 XCV, 95 】XCVIII, 98】 XCIX, 99 】class

·百位數舉例
C, 100】 CC, 200 】CCC, 300 】CD, 400】 D, 500 】DC,600 】DCC, 700】 DCCC, 800 】CM, 900】 CMXCIX,999】基礎

·千位數舉例
M, 1000】 MC, 1100 】MCD, 1400 】MD, 1500 】MDC, 1600 】MDCLXVI, 1666】 MDCCCLXXXVIII, 1888 】MDCCCXCIX, 1899 】MCM, 1900 】MCMLXXVI, 1976】 MCMLXXXIV, 1984】 MCMXC, 1990 】MM, 2000 】MMMCMXCIX, 3999】di

看到上面咱們就發現,其實最難辦的就是像IV這樣的須要判斷一下,其餘的直接累加就好,因此咱們能夠把這些須要兩個一塊兒的也當作基礎數字來減小判斷。ant

class Solution:
    # @return an integer
    def romanToInt(self, s):
        dic = {"M":1000,"CM":900,"D":500,"CD":400,"C":100,"XC":90,"L":50,"XL":40,"X":10,"IX":9,"V":5,"IV":4,"I":1}
        l = len(s)
        res = 0
        i = 0
        while i < l:
            if i+1 < l and s[i]+s[i+1] in dic:
                res += dic[s[i]+s[i+1]]
                i += 1
            else:
                res += dic[s[i]]
            i += 1
        return res
相關文章
相關標籤/搜索