算法創作|羅馬數字的轉化

本文首發於微信公衆號:"算法與編程之美",歡迎關注,及時瞭解更多此係列文章。

前言

力扣(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。

通常情況下,羅馬數字中小的數字在大的數字的右邊。但也存在特例,例如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:

    輸入:3

    輸出:"III"

    解釋:有三個"I"加在一起

    示例2:

    輸入:4

    輸出:"IV"

    示例3:

    輸入:58

    輸出:"LVIII"



解決方案

當題目中出現了羅馬數字列表,首先要想到的便是字典,因爲字典中的value和key的條件關係正好可以對於羅馬數字字符的轉化,這裏就可以得到一組字典,那麼再回到題目,仔細觀察可以發現,每一個羅馬字符所對應的數值都是正整數而且可以被5整除(1除外),那麼就可以思考,當輸入一個數值過後,去把轉化字符的過程中,是否可以通過整除的方式來進行轉化,例如,當輸入一個數值:21,自然它的羅馬字符爲XXI,仔細觀察和思考,可以這麼去思考它是被10整除得到2,2也就是兩個XX,剩下的1可以被I整除得到一個I,兩個互相合並,得到的XXI,這麼一想,就可以得到一個結論,用數值去除以字典中能夠被整除的最大數值,得到的數就是相對應的多少個羅馬字符,那麼此題也便迎刃而解。

羅馬數字的轉化Python代碼

num=int(input())

dict_hs={1000:'M',900:'CM',500:'D',400:'CD',100:'C',90:'XC',50:'L',40:'XL',10:'X',9:'IX',5:'V',4:'IV',1:'I'}

res=''

forkeyindict_hs:

ifnum//key!=0:

count=num//key

res+=dict_hs[key]*count

num-=key*count

print(res)

上面代碼的解題思路主要是以哈希表來進行解答,這也是絕大多數學者的解題思路,但是在力扣此題評論區的大佬卻讓我刮目相看,對此題又有了不同的想法,一位大佬說到用列表可以替換哈希表,大體的思路就是創建兩個列表,列表內的元素與羅馬字符一一對應,運用for循環遍歷長度,再通過下標解決,解題思路非常奇妙。

num=int(input())

N=['M','CM','D','CD','C','XC','L','XL','X','IX','V','IV','I']

n=[1000,900,500,400,100,90,50,40,10,9,5,4,1]

ans=''

foriinrange(len(n)):

ifnum>=n[i]:

count=num//n[i]

num-=n[i]*count

ans+=N[i]*count

print(ans)

運行示例:


結語

在解決此題的過程中,小編首先拿到題目自己思考,尋找自己的解決方案,同時在得到自己的解題思路後,其次便是和自己組內的隊員進行深入的探討,去討論他們對此題的理解及其解題思路,當我們都看到羅馬字符有其對應的阿拉伯數字過後,都會聯想到去用哈希表解決,但我們也同時在思考有沒有簡便的,時間複雜度(On)小的,或者空間複雜度小的,我們嘗試去創新新的解題技巧,學習新的解題思路,在此我非常感謝我的隊友,同時感謝力扣能提供一個我們學習的平臺。




實習編輯:衡輝

作者:吳合力 齊華軍 黃曰標

稿件來源:深度學習與文旅應用實驗室(DLETA)

本文分享自微信公衆號 - 算法與編程之美(algo_coding)。
如有侵權,請聯繫 [email protected] 刪除。
本文參與“OSC源創計劃”,歡迎正在閱讀的你也加入,一起分享。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章