13. Roman to Integer
題目描述
Given a roman numeral, convert it to an integer.
Input is guaranteed to be within the range from 1 to 3999.
給定一個羅馬數字,把它轉換為一個整數。
輸入被保證在 1 到 3999 之間。
原文地址
思路方法
羅馬數字的規則詳細見帖子下方。
可以很簡單去思考這個規則,就是對於輸入的羅馬數字字串,從後向前掃描,遇到前面數大於等於後面的最大數的時候,相加;遇到前面數小於後面的最大數的時候,相減。
class Solution(object):
def romanToInt(self, s):
"""
:type s: str
:rtype: int
"""
dic = {'I':1, 'V':5, 'X':10, 'L':50, 'C':100, 'D':500, 'M':1000}
result = 0
maxDigit = 1
for i in range(len(s)-1, -1, -1):
if dic[ s[i] ] >= maxDigit:
#存放已經掃描過的最大數值
maxDigit = dic[ s[i] ]
result = result + dic[ s[i] ]
else:
result = result - dic[ s[i] ]
return result
知識點
羅馬數字拼寫規則
羅馬數字共有 7 個,即Ⅰ(1)、Ⅴ(5)、Ⅹ(10)、Ⅼ(50)、Ⅽ(100)、Ⅾ(500)和Ⅿ(1000)。按照下述的規則可以表示任意正整數。需要注意的是羅馬數字中沒有 “0”,與進位制無關。一般認為羅馬數字只用來記數,而不作演算。
- 重複數次:一個羅馬數字重複幾次,就表示這個數的幾倍。
- 右加左減:
- 在較大的羅馬數字的右邊記上較小的羅馬數字,表示大數字加小數字。
- 在較大的羅馬數字的左邊記上較小的羅馬數字,表示大數字減小數字。
- 左減的數字有限制,僅限於 I、X、C。比如 45 不可以寫成 VL,只能是 XLV
- 但是,左減時不可跨越一個位值。比如,99 不可以用 IC( {\displaystyle 100-1} 100-1)表示,而是用 XCIX( {\displaystyle [100-10]+[10-1]} [100-10]+[10-1])表示。(等同於阿拉伯數字每位數字分別表示。)
- 左減數字必須為一位,比如 8 寫成 VIII,而非 IIX。
- 右加數字不可連續超過三位,比如 14 寫成 XIV,而非 XIIII。(見下方 “數碼限制” 一項。)
- 加線乘千:
- 在羅馬數字的上方加上一條橫線或者加上下標的Ⅿ,表示將這個數乘以 1000,即是原數的 1000 倍。
- 同理,如果上方有兩條橫線,即是原數的 1000000( {\displaystyle 1000{2}} 1000{{2}})倍。
- 數碼限制:
- 同一數碼最多隻能連續出現三次,如 40 不可表示為 XXXX,而要表示為 XL。
- 例外:由於 IV 是古羅馬神話主神朱庇特(即 IVPITER,古羅馬字母裡沒有 J 和 U)的首字,因此有時用 IIII 代替 IV。
range()
>>> range(1, 5) #從1 到 5 ,但是不包含5
[1, 2, 3, 4]
>>> range(1, 5, 2) #從1 到 5,間隔是2,不包含5
[1, 3]
>>> range(5) #從 0 到 5,不包含5
[0, 1, 2, 3, 4]
相關文章
- LeetCode 13. Roman to Integer C語言LeetCodeC語言
- Leetcode 12 Integer to RomanLeetCode
- Leetcode 13 Roman to IntegerLeetCode
- Leetcode 12. Integer to RomanLeetCode
- LeetCode Integer to Roman(012)解法總結LeetCode
- LeetCode Roman to Integer(013)解法總結LeetCode
- LeetCode - 解題筆記 - 12 - Integer to RomanLeetCode筆記
- Roman to Integer 羅馬數字轉整數
- Integer比較
- 13. 分組資料
- Leetcode 7 Reverse IntegerLeetCode
- Integer包裝類
- [Java基礎]IntegerJava
- Integer的比較
- 程式碼審查清單:Java併發 - Roman LeventovJava
- 走進 JDK 之 IntegerJDK
- Leetcode 273 Integer to English WordsLeetCode
- Leetcode 8 String to Integer (atoi)LeetCode
- Integer128==128?falseFalse
- ibatis中integer型別BAT型別
- 【深基13.例1】查詢
- Java Integer的快取策略Java快取
- int和Integer的區別
- Integer 自動拆箱封箱
- Integer轉int出現NullPointExceptionNullException
- int與Integer的區別
- 13. 羅馬數字轉整數
- Redis 實戰 —— 13. 擴充套件 RedisRedis套件
- 產品路線圖要避免的10個錯誤 - roman
- JDK原始碼閱讀-Integer類JDK原始碼
- 從JDK原始碼角度看IntegerJDK原始碼
- java基礎:Integer — 原始碼分析Java原始碼
- Number.MIN_SAFE_INTEGER屬性
- Number.MAX_SAFE_INTEGER 屬性
- LeetCode Reverse Integer(007)解法總結LeetCode
- [leetcode] 1394. Find Lucky Integer in an ArrayLeetCode
- 989. Add to Array-Form of IntegerORM
- Java中Integer類的基本方法Java