leetcode 12 整數轉羅馬數字

2021-09-27 11:40:54 字數 2330 閱讀 7821

leetcode題目鏈結

題目要求:整數轉換成羅馬數字。

不斷地對(1000,500,100,50,10,5)取餘。

但是要對 40 90 400 900特殊處理,比較麻煩

class

solution

:def

inttoroman

(self, num:

int)

->

str:

# if num//1000

res =

''for i in

range

(num//

1000):

res+=

'm' num = num%

1000

# if num == 900:

# res+='cd'

# 每次//10的跨度,都要進行多次判斷,**冗餘

for i in

range

(num//

500)

: res+=

'd' num = num%

500for i in

range

(num//

100)

: res+=

'c' num = num%

100for i in

range

(num//50)

: res+=

'l' num = num%

50for i in

range

(num//10)

: res+=

'd' num = num%

10for i in

range

(num//5)

: res+=

'v' num = num%

5for i in

range

(num)

: res+=

'i'return res

if __name__ ==

"__main__"

: a = solution(

)print

(a.inttoroman(

1994

))

思路

參考部落格

將所有的情況,通過字典或者陣列,先存起來,直接用。

其實,也是死方法。

#通過陣列儲存

definttoroman

(self, num:

int)

->

str:

m =(""

,"m"

,"mm"

,"mmm"

) c =(""

,"c"

,"cc"

,"ccc"

,"cd"

,"d"

,"dc"

,"dcc"

,"dccc"

,"cm"

) x =(""

,"x"

,"xx"

,"***"

,"xl"

,"l"

,"lx"

,"lxx"

,"l***"

,"xc"

) i =(""

,"i"

,"ii"

,"iii"

,"iv"

,"v"

,"vi"

,"vii"

,"viii"

,"ix"

) res =

''+ m[num//

1000

]+c[

(num%

1000)//

100]

+x[(num%

100)

//10

]+i[num%10]

return res

#通過字典儲存

definttoroman

(self, num:

int)

->

str:

d =res =

'' count =

0for i in

str(num)

: res = res + d[

len(

str(num)

)-count]

[int

(i)]

count+=

1return res

LeetCode12 整數轉羅馬數字

題目大意 將乙個1到3999範圍內的整數轉為羅馬數字 題目分析 首先熟悉轉換規則,然後可以使用兩個list儲存對應的對映關係,然後每次從大到小看num是否大於1000,大於900,大於500,若在某個區間的話,就將羅馬數字加進來,num減去相應的數值,直到num為0 展示 class solutio...

Leetcode 12 整數轉羅馬數字

題目 羅馬數字包含以下七種字元 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 12 整數轉羅馬數字

題目鏈結 題目描述 羅馬數字包含以下七種字元 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 通常...