要求給定乙個羅馬數字,將其轉為整數。整數的範圍為 1 ~ 3999。
羅馬數字可以由7個符號來表示: i, v, x, l, c, d 和 m.符號值
i1v5
x10l50
c100
d500
m1000
比如,2的羅馬數字為ii,即兩個1加起來。12的羅馬數字為xii,即x+ii。27的羅馬數字為xxvii,即xx+v+ii。
羅馬數字的符號通常由大到小排列。但是,4的羅馬數字並不是iiii,而是iv。因為1是在5前面,所以我們需要減去1。類似的例子有9,羅馬數字為ix。一共有6種減法情況:
示例:example 1:
input: 「iii」
output: 3
example 2:
input: 「iv」
output: 4
example 3:
input: 「ix」
output: 9
example 4:
input: 「lviii」
output: 58
explanation: c = 100, l = 50, *** = 30 and iii = 3.
example 5:
input: 「mcmxciv」
output: 1994
explanation: m = 1000, cm = 900, xc = 90 and iv = 4.
從左向右掃瞄,掃瞄步長為1,掃瞄範圍為2。
注意:要考慮到6個減法情況。這也是為什麼掃瞄範圍為2的原因。一旦後面的字元比當前字元大,說明屬於6個減法情況之一。
def
romantoint
(s):
""" :type s: str
:rtype: int
從左向右掃瞄,掃瞄步長為1,掃瞄範圍為2。要考慮到6個減法情況。
"""romans =
result =
0 i =
0 max_len =
len(s)
while
(i < max_len)
:if s[i:i+2]
in romans:
result += romans[s[i:i+2]
] i +=
2else
: result += romans[s[i]
] i +=
1return result
if'__main__'
== __name__:
num =
'mcmxciv'
print
(romantoint(num)
)
leetcode 13 羅馬數轉整數
羅馬數字包含以下七種字元 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 通常情況下,羅馬數字中...
13 羅馬數轉整數
從左到右逐個字元遍歷字串,找出字元對應的整數,累加起來,在找字元的過程中,需要判斷該字元對應整數與後面乙個字元對應的整數的大小關係。如果前面大於後面字元對應的整數,則將前面字元對應的整數加進去,否則將後面字元對應的整數減去前面字元對應的整數得到的值加進去,此時這次遍歷要跳躍兩個字元來進行下一次遍歷。...
12 整數轉羅馬數和13 羅馬數轉整數
題目的給出了幾種轉換策略,以及在個位是4,6的時候有一些變換。首先乙個整數num的範圍是1 3999,數字的位數情況是 千位,百位,十位,個位。每一位的數字其實就有四種情況,以百位為例 100,300 是一類 400是一類 500,800 是一類 900是一類 整個演算法上沒什麼特別困難的比較好理解...