輸入: 「iii」輸出: 3
輸入: 「iv」輸出: 4
輸入: 「ix」輸出: 9
輸入: 「lviii」輸出: 58
解釋: l = 50, v= 5, iii = 3.
輸入: 「mcmxciv」其實實現的思路很簡單,我們就先建立輸出: 1994
解釋: m = 1000, cm = 900, xc = 90, iv = 4.
羅馬數字與阿拉伯數字對應的字典
,然後再通過遍歷羅馬數字字串,遍歷時比較左邊和右邊對應數字的大小,如果右邊大於左邊再轉換的時候就需要利用兩位進行轉換否則就只使用一位即可,實現**如下
class
solution
:def
romantoint
(self, s:
str)
->
int:
#定義羅馬數字轉阿拉伯數字的字典
roman_to_int =
res_int =
0 s_len =
len(s)
i =0while i < s_len-1:
if roman_to_int[s[i]
]< roman_to_int[s[i+1]
]:res_int += roman_to_int[s[i:i+2]
] i +=
2else
: res_int += roman_to_int[s[i]
] i +=
1if i == s_len -1:
res_int += roman_to_int[s[i]
]return res_int
solution = solution(
)print
(solution.romantoint(
"mcmxciv"
))
除此之外,還有一種比較簡潔的寫法,每次轉換的時候都先轉換乙個2位字元的羅馬數字,如果找不到對應的就轉換一位
,因為在進行2位字元轉換的時候會導致前面一位被重複計算,所以在定義字典的時候,我們先減去左邊羅馬數字對應的數字值,避免重複計算的問題。
class
solution
:def
romantoint
(self, s:
str)
->
int:
#定義羅馬數字轉阿拉伯數字的字典
#需要注意的是這裡的字典定義的數字要比實際的小乙個左邊的數字
roman_to_int =
#這裡的max(i-1,0)防止下標越界
return
sum(roman_to_int.get(s[
max(i-1,
0):i+1
],roman_to_int[s_c]
)for i,s_c in
enumerate
(s))
參考:
leetcode詳細題解
python實現將整數轉換為羅馬數字
羅馬數字包含以下七種字元 i,v,x,l,c,d和m。字元數值i1 v5x10 l50c100 d500 m1000 例如,羅馬數字 2 寫做ii,即為兩個並列的 1。12 寫做xii,即為 x ii 27 寫做xxvii,即為 xx v ii 通常情況下,羅馬數字中小的數字在大的數字的右邊。但也存...
羅馬數字轉換為整數
給定乙個羅馬數字 s s,將羅馬數字轉換成整數。如羅馬數字i,ii,iii,iv,v分別代表數字 1,2,3,4,51,2,3,4,5。首先要來了解一下羅馬數字表示法,基本字元有 7 7 個 i v x l c d m,分別表示 11 5 5 1010 505 0 10010 0 50050 0 1...
羅馬數字轉換為整數
羅馬數字包含以下七種字元 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 通常情況下,羅馬數字中...