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(
(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 通常...