【leetcode】Roman to Integer
題目描述:
Given a roman numeral, convert it to an integer.
Input is guaranteed to be within the range from 1 to 3999.
解題思路:
首先我們要了解羅馬數字怎么寫的
個位數舉例
I, 1 】II, 2】 III, 3】 IV, 4 】V, 5 】VI, 6】 VII, 7】 VIII,8 】IX, 9
·十位數舉例
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 】
·百位數舉例
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】
看到上面我們就發現,其實最難辦的就是像IV這樣的需要判斷一下,其他的直接累加就好,所以我們可以把這些需要兩個一起的也當做基礎數字來減少判斷。
class Solution:# @return an integerdef 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 = 0i = 0while i < l:if i+1 < l and s[i]+s[i+1] in dic:res += dic[s[i]+s[i+1]]i += 1else:res += dic[s[i]]i += 1return res
轉載于:https://www.cnblogs.com/MrLJC/p/4276116.html
總結
以上是生活随笔為你收集整理的【leetcode】Roman to Integer的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 熊多少钱一只啊?
- 下一篇: Linux socket TIME_WA