[
羅馬數字包含以下七種字元: i, v, x, l,c,d 和 m。
字元數值i1
v5x10
l50c100
d500
m1000
例如, 羅馬數字 2 寫做 ii ,即為兩個並列的 1。12 寫做 xii ,即為 x + ii 。 27 寫做 xxvii, 即為 xx + v + ii 。
通常情況下,羅馬數字中小的數字在大的數字的右邊。但也存在特例,例如 4 不寫做 iiii,而是 iv。數字 1 在數字 5 的左邊,所表示的數等於大數 5 減小數 1 得到的數值 4 。同樣地,數字 9 表示為 ix。這個特殊的規則只適用於以下六種情況:
i 可以放在 v (5) 和 x (10) 的左邊,來表示 4 和 9。
x 可以放在 l (50) 和 c (100) 的左邊,來表示 40 和 90。
c 可以放在 d (500) 和 m (1000) 的左邊,來表示 400 和 900。
給定乙個整數,將其轉為羅馬數字。輸入確保在 1 到 3999 的範圍內。
示例示例1
輸入: 3
輸出: 「iii」
示例 2:
輸入: 4
輸出: 「iv」
示例 3:
輸入: 9
輸出: 「ix」
示例 4:
輸入: 58
輸出: 「lviii」
示例 5:
輸入: 1994
輸出: 「mcmxciv」
本題目的將阿拉伯數字轉化成羅馬數字,而千位、百位、十位、個位上的數字都對應著不同的羅馬字元,需要對不同位置上的數字進行處理,思路如下:
(甲)
(1)建立阿拉伯數字和羅馬字元之間的字典;
(2)將輸入值按照所在位置分解成多個數,比如:3214分解成:3000,200,10,4
(3)用分解後的四個數字分別匹配字典中對應的羅馬字元:3000:「mmm」,200:「ccc」,10:「x」,4:「iv」
(4)將匹配好的羅馬字串在一起得到最終結果。
(乙)
(1) 將不同位數上羅馬數字的組成元素存放在不同的列表中;
(2) 將輸入值按照所在位置分解成多個數,比如:3214分解成:3000,200,10,4;
(3) 對各位上的數字選取相應的表示方法,再進行組合。
# 自己解法
#(甲)
class
solution
:def
inttoroman
(self, num:
int)
->
str:
dict
= b =
[1000
,100,10
,1] res =
for i in b:
if num/i >1:
dict
[(num//i)
*i])
num = num % i
return
"".join(res)
#(乙)
class
solution
:def
inttoroman
(self, num:
int)
->
str:
l =s =[[
'i',
'v'],[
'x',
'l'],[
'c',
'd'],[
'm']
] p =
for i in
range(1
,5):
t = num%(10
**i)
num-=t
for i in
range
(len
(l)-1,
-1,-
1): k = l[i]/(
10**i)
if k in(1
,2,3
):int(k)
*s[i][0
])elif k in(5
,6,7
,8):
[1]+
int(k-5)
*s[i][0
])elif k==4:
[0]+s[i][1
])elif k==0:
'')else:[
0]+s[i+1]
[0])
return(''
.join(p)
)# 網上最優解法
class
solution
:def
inttoroman
(self, num:
int)
->
str:
res =
'' dict_romans =
for key in dict_romans:
if num // key >=1:
res += dict_romans[key]
*(num // key)
num = num % key
return res
(1)// :表示整除的值
(2)% :表示除完後的餘數
(3)dict[key] :字典使用方式,用key表示value
(4) 最優解法使用了阿拉伯數字和羅馬字元間更強的規律,我是很難總結出這個規律,可以用列舉法去總結。
leetcode記錄 羅馬數字轉整數
羅馬數字包含以下七種字元 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記錄 字串轉整數(atoi)
實現atoi,將字串轉為整數。在找到第乙個非空字元之前,需要移除掉字串中的空格字元。如果第乙個非空字元是正號或負號,選取該符號,並將其與後面盡可能多的連續的數字組合起來,這部分字元即為整數的值。如果第乙個非空字元是數字,則直接將其與之後連續的數字字元組合起來,形成整數。字串可以在形成整數的字元後面包...
LeetCode 其他題目記錄
104.maximum depth of binary tree 和111很像,只是遞迴的結構略有不同,可簡單畫圖分析,求最大深度可以直接返回1 max 左子樹深度,右子樹深度 但是求最小深度時不可以,需要分別考慮左右子樹為空的情況。可以舉個反例子,比如,單斜樹。1 class solution 7...