leetCode 12. Integer to Roman

刷到了leetCode的第12道題,這道題很有意思,前前后后寫了好久民假,并不難可免,主要是數(shù)字轉(zhuǎn)換抓于。

Given an integer, convert it to a roman numeral.

Input is guaranteed to be within the range from 1 to 3999.

這個(gè)題的中文意思就是給定一個(gè)數(shù)字(從1到3999)將這個(gè)數(shù)字轉(zhuǎn)化成羅馬數(shù)字并輸出
首先思路就是研究一下羅馬數(shù)字的寫法,說(shuō)來(lái)慚愧浇借,我一直以為羅馬數(shù)字只有10個(gè)

“I” "II" "III" "IV" "V" "VI" "VII" "VIII" "IX" "X"

后來(lái)經(jīng)過(guò)查找捉撮,羅馬數(shù)字是有規(guī)律的
羅馬數(shù)字總共有7個(gè)

“I” "V" "X" "L" "C" "D" "M"

分別是1,5妇垢,10巾遭,50肉康,100,500灼舍,1000
首先羅馬數(shù)字遵循的原理是

‘左減右加’

‘加最多到三’

解釋一下吼和,左減右加: VI 是 6 可以看做 ‘5+1’ 也就是 ‘V+I’ IV 是 4 可以看做‘5-1’ 也就是‘I-V’
加最多到三 這個(gè)就不用過(guò)多解釋了
有了這個(gè)思路后我們就可以開始代碼了
首先我們把上面給的字母分組 我的分組方式 是I自己一組,剩下的兩個(gè)一個(gè)分組

#分組最后空出一組骑素,是因?yàn)樽詈蠓乐钩霈F(xiàn)數(shù)組越界
roman_array = [['V','X'],['L','C'],['D','M'],['','']]
#下一步就是按位數(shù)將數(shù)字取出了炫乓,這一步我是將數(shù)字轉(zhuǎn)成字符,并逐位取出
str = '%d'%(num)
count = len(str)
real_str = ''
#當(dāng)還有剩余位數(shù)時(shí)
while count > 0:
#取出對(duì)應(yīng)數(shù)字
  head_num =  int(str[len(str) - count])
#當(dāng)當(dāng)前位數(shù)為第一位時(shí)(也就是認(rèn)為取出的是個(gè)位數(shù)時(shí))給字符串?dāng)?shù)組賦值為空(此數(shù)組為當(dāng)前數(shù)組單位)
  sub_array = ['', ''] if count - 2 < 0 else roman_array[count - 2]
#數(shù)組為下一位進(jìn)制數(shù)組(因當(dāng)前數(shù)字為9時(shí)献丑,需要使用下一位數(shù)的十位數(shù)字母末捣,如果為9則需要顯示‘IX’)
  append_array = roman_array[count - 1]
#在這個(gè)地方,判斷了下是否大于5创橄,因如果大于5則前需要加上一個(gè)5進(jìn)制符號(hào)箩做,通過(guò)角標(biāo)獲取
  index = 1 if head_num > 5 else 0
#剩下就是將這個(gè)數(shù)字轉(zhuǎn)化成5及5已下的字符了
  real_head = head_num - 5 if head_num > 5 else head_num
#當(dāng)情況為4、5的時(shí)候情況單獨(dú)羅列
  if real_head == 4:
    real_str += sub_array[1]
#判斷這個(gè)時(shí)候有無(wú)進(jìn)制位數(shù)筐摘,若無(wú)進(jìn)制數(shù)卒茬,則補(bǔ)充進(jìn)制數(shù)為‘I’
    if len(sub_array[1]) == 0:
      real_str += 'I'
      real_str += append_array[index]
  elif real_head == 5:
    real_str += append_array[index]
  else:
#在這個(gè)情況判斷是大于5或者小于5
    if index > 0:
      real_str += append_array[0]
#用遍歷的方式添加字符
    for i in range(0, real_head):
      real_str += sub_array[1]
      if len(sub_array[1]) == 0:
          real_str += 'I'
  count -= 1

最后這個(gè)real_str 就是我們需要的字符了,直接return 就好了
做這道題的時(shí)候咖熟,錯(cuò)了好多遍圃酵,思路也是不斷的在變化,最后才成功寫出了這個(gè)羅馬數(shù)字的題馍管,題并不難郭赐,只要知道了規(guī)律,就很好寫了

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末确沸,一起剝皮案震驚了整個(gè)濱河市捌锭,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌罗捎,老刑警劉巖观谦,帶你破解...
    沈念sama閱讀 206,214評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異桨菜,居然都是意外死亡豁状,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,307評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門倒得,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)泻红,“玉大人,你說(shuō)我怎么就攤上這事霞掺∫曷罚” “怎么了?”我有些...
    開封第一講書人閱讀 152,543評(píng)論 0 341
  • 文/不壞的土叔 我叫張陵菩彬,是天一觀的道長(zhǎng)缠劝。 經(jīng)常有香客問(wèn)我潮梯,道長(zhǎng),這世上最難降的妖魔是什么剩彬? 我笑而不...
    開封第一講書人閱讀 55,221評(píng)論 1 279
  • 正文 為了忘掉前任酷麦,我火速辦了婚禮,結(jié)果婚禮上喉恋,老公的妹妹穿的比我還像新娘沃饶。我一直安慰自己,他們只是感情好轻黑,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,224評(píng)論 5 371
  • 文/花漫 我一把揭開白布糊肤。 她就那樣靜靜地躺著,像睡著了一般氓鄙。 火紅的嫁衣襯著肌膚如雪馆揉。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,007評(píng)論 1 284
  • 那天抖拦,我揣著相機(jī)與錄音升酣,去河邊找鬼。 笑死态罪,一個(gè)胖子當(dāng)著我的面吹牛噩茄,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播复颈,決...
    沈念sama閱讀 38,313評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼绩聘,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了耗啦?” 一聲冷哼從身側(cè)響起凿菩,我...
    開封第一講書人閱讀 36,956評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎帜讲,沒(méi)想到半個(gè)月后衅谷,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,441評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡似将,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,925評(píng)論 2 323
  • 正文 我和宋清朗相戀三年获黔,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片玩郊。...
    茶點(diǎn)故事閱讀 38,018評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡肢执,死狀恐怖枉阵,靈堂內(nèi)的尸體忽然破棺而出译红,到底是詐尸還是另有隱情,我是刑警寧澤兴溜,帶...
    沈念sama閱讀 33,685評(píng)論 4 322
  • 正文 年R本政府宣布侦厚,位于F島的核電站耻陕,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏刨沦。R本人自食惡果不足惜诗宣,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,234評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望想诅。 院中可真熱鬧召庞,春花似錦、人聲如沸来破。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,240評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)徘禁。三九已至诅诱,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間送朱,已是汗流浹背娘荡。 一陣腳步聲響...
    開封第一講書人閱讀 31,464評(píng)論 1 261
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留驶沼,地道東北人炮沐。 一個(gè)月前我還...
    沈念sama閱讀 45,467評(píng)論 2 352
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像商乎,于是被迫代替她去往敵國(guó)和親央拖。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,762評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容