leetcode 13 羅馬數字轉整數

2021-10-08 12:31:02 字數 1769 閱讀 1069

字串題目編碼時真是令人頭疼。本題可以將千位、百位、十位、個位分別分割出來,再按照其對應的對映變更為阿拉伯數字。列出每個位上的所有可能情況後,可以發現如下規律:

從左至右該字母首次出現

標誌著阿拉伯數字進入的位級

c/d進入百位

x/l進入十位

v/i進入個位

判斷首次出現的方法:該字母出現了,並且該字母對應的阿拉伯位級還沒有被確定,並且當前考察的位級在該字母對應的位級的左邊(考慮9:ix)

class

solution

:def

romantoint

(self, s:

str)

->

int:

thousand =

"" hundred =

"" ten =

"" one =

"" turn =

0for i in

range

(len

(s)):if

(s[i]

=='c'

or s[i]

=='d'

)and hundred ==

""and turn<1:

turn =

1elif

(s[i]

=='x'

or s[i]

=='l'

)and ten ==

""and turn<2:

turn =

2elif

(s[i]

=='v'

or s[i]

=='i'

)and one ==

""and turn<3:

turn =

3if turn ==0:

thousand = thousand + s[i]

elif turn ==1:

hundred = hundred + s[i]

elif turn ==2:

ten = ten + s[i]

else

: one = one + s[i]

dic =

res = dic[one]

+ dic[ten]

+ dic[hundred]

+ dic[thousand]

return res

76ms 13.7mb

題解的思路更加具有一般性,本質上來說,單個字元對應的數字,若比右邊的字元大,那麼為正,若比右邊的字元小,那麼為特殊情況,為負

class

solution

:def

romantoint

(self, s:

str)

->

int:

dic =

pre = dic[s[0]

]sum=0

for i in

range(1

,len

(s))

:if presum=

sum- pre

else

:sum

=sum

+ pre

pre = dic[s[i]

]sum

=sum

+ pre

return

sum

52ms 13.8mb

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。通常情況下,羅馬數字中小的數字在大的數字...

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。通常情況下,羅馬數字中小的數字在大的數字的...

Leetcode 13 羅馬數字轉整數

羅馬數字包含以下七種字元 i,v,x,l,c,d 和 m。字元 數值 i 1v 5 x 10 l 50 c 100 d 500 m 1000 例如,羅馬數字 2 寫做 ii 即為兩個並列的 1。12 寫做 xii 即為 x ii 27 寫做 xxvii,即為 xx v ii 通常情況下,羅馬數字中小...