題目
羅馬數字包含以下七種字符:
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,通常情況下,羅馬數字中小的數字在大的數字的右邊,但也存在特例,例如 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 的范圍內,
來源:力扣(LeetCode)
初始化代碼模板:
class Solution:
def romanToInt(self, s: str) -> int:
解題
1. 第一種方法
第一種方法,直接將字串中的羅馬數字轉換為數字,用空格分隔,并以空格作為分隔符,將字串分割為串列,然后把串列的每一項轉為整數后求和:
class Solution:
def romanToInt(self, s: str) -> int:
#直接將字串中的羅馬數字轉換為數字,用空格分隔
s=s.replace('IV','4 ')
s=s.replace('IX','9 ')
s=s.replace('XL','40 ')
s=s.replace('XC','90 ')
s=s.replace('CD','400 ')
s=s.replace('CM','900 ')
s=s.replace('I','1 ')
s=s.replace('V','5 ')
s=s.replace('X','10 ')
s=s.replace('L','50 ')
s=s.replace('C','100 ')
s=s.replace('D','500 ')
s=s.replace('M','1000 ')
#以空格作為分隔符,將字串分割為串列
l = s.split(' ')[:-1]
#把串列的每一項轉為整數后求和
l = list(map(int, l))
return sum(l)
2. 第二種方法
首先在類的外部創建一個字典,羅馬數字對應的整數:
d = {'I':1, 'V':5, 'X':10, 'L':50, 'C':100, 'D':500, 'M':1000}
類的方法內部創建一個串列 r,在遍歷字串時存盤要累加的值,
r = [0]
接下來遍歷字串,
for 回圈中的變數 l 為 r 的最后一個元素,即最新加入的元素,也就是上一個字符所表示的數字,若當前數字大于 l,則說明出現了小數在前大數在后的情況,即出現了題目所說的特例,這時候的計算方法為大數減小數,即當前數字減去上一個數字,這時候我們可以將上一個數字轉為負數,這樣累加時便可達到相減的效果,
for i in s:
l = r[-1] # 變數 l 為 r 的最后一個元素
if d[i] > l: # 若當前數字大于 l,則說明出現了題目所說的特例
r[-1] = -l # 將上一個數字轉為負數
r.append(d[i]) # 將當前數字加入串列
完整代碼:
d = {'I':1,'V':5,'X':10,'L':50,'C':100,'D':500,'M':1000}
class Solution:
def romanToInt(self, s: str) -> int:
r = [0]
for i in s:
l = r[-1]
if d[i] > l:
r[-1] = -l
r.append(d[i])
return sum(r)
End
謝謝閱讀!
點個贊,支持一下作者吧!
本文收錄于專欄:Python刷題·演算法
關注作者,持續閱讀,學習更多Python知識!
https://blog.csdn.net/weixin_52132159
2021/7/31
推薦閱讀
- Python爬蟲 | 爬取b站北京奧運會開幕式彈幕,有多少人從東京奧運會跑過來的?
- 絕密!Python爬蟲告訴你刷分機器人背后的原理!這篇文章差點沒過審
- Python每天一道題:昆蟲繁殖問題?我把密密麻麻的幼蟲和成蟲搞定了
- Python爬蟲從0到1 | 入門實戰:360翻譯 ——requests庫之POST方法(新手必看,保姆級別教學)
- 沒想到我連五年級的題目都解不出來?可不能被人小看,讓萬能的Python登場
- Python:程式猿怎么追女生?教你短短幾行代碼表白,告別表白尷尬!
- Python標準庫:datetime 時間和日期模塊 —— 時間的獲取和操作詳解,文章滿滿是干貨!
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/291486.html
標籤:python
