摘要:這是羅馬數(shù)字轉(zhuǎn)為十進(jìn)制數(shù)的后序題目要求將十進(jìn)制數(shù)字轉(zhuǎn)化為羅馬數(shù)字,數(shù)值范圍是在羅馬數(shù)字轉(zhuǎn)化為十進(jìn)制數(shù)的博客中我簡單的介紹了一下如何將羅馬數(shù)字轉(zhuǎn)化為十進(jìn)制數(shù)字。
這是羅馬數(shù)字轉(zhuǎn)為十進(jìn)制數(shù)的后序
題目要求:將十進(jìn)制數(shù)字轉(zhuǎn)化為羅馬數(shù)字,數(shù)值范圍是[1,3999]
在羅馬數(shù)字轉(zhuǎn)化為十進(jìn)制數(shù)的博客中,我簡單的介紹了一下如何將羅馬數(shù)字轉(zhuǎn)化為十進(jìn)制數(shù)字。在這道題目里,我們需要進(jìn)一步了解十進(jìn)制數(shù)轉(zhuǎn)換為羅馬數(shù)字的協(xié)議
羅馬單個(gè)數(shù)字共有7個(gè),即I(1)、V(5)、X(10)、L(50)、C(100)、D(500)和M(1000)
可以被減去的值只有I(1)、X(10)、C(100),且每個(gè)值最多只可以減去一次
左減時(shí)不可以跨位數(shù),例如99不能被表示為IC,而是XCIX
多個(gè)相同字母連續(xù)出現(xiàn)時(shí)表示相加,但是字母不能重復(fù)出現(xiàn)超過4次
綜上所述,個(gè)位上的數(shù)可以由I、V、X表示出來,同理,十位上的樹可以由X、L、C表示,百位上可以由C、D、M表示,千位上則為M(數(shù)字不超過3999)
所以可以分別對(duì)整數(shù)的每一位上的值進(jìn)行計(jì)算,得出相應(yīng)的羅馬數(shù)字值,并最后合并為最終得羅馬數(shù)字
我嘗試了兩種數(shù)據(jù)存儲(chǔ)方法,先嘗試了map,感覺性能較差,然后嘗試了array,性能的提升并不顯著
//map public String intToRoman(int num) { MapromanIntMap = new HashMap (); romanIntMap.put(1, "I"); romanIntMap.put(5, "V"); romanIntMap.put(10, "X"); romanIntMap.put(50, "L"); romanIntMap.put(100, "C"); romanIntMap.put(500, "D"); romanIntMap.put(1000, "M"); StringBuilder finalResult = new StringBuilder(); for(int i = 1 ; num>0 ; i*=10){ StringBuilder result = new StringBuilder(""); int digit = num%10; if(digit==0){ }else if(digit<=3){ for(int j = 0 ; j 0 ; i++){ StringBuilder result = new StringBuilder(""); int digit = num%10; num /= 10; if(digit==0){ continue; }else if(digit<=3){ for(int j = 0 ; j 思路二:窮盡枚舉 因?yàn)轭}設(shè)中輸入羅馬數(shù)字是一定區(qū)間上的值,因此它的特殊情況是可以窮盡的
我們從個(gè)位入手來考慮每一位上較為特殊的情況==9 : IX
==5 : V
==4 : IV
<4 : I*n
也就是說,由大至小減去后剩下的值都有對(duì)應(yīng)的羅馬數(shù)字存在
public String intToRoman(int num) { int[] values = {1000,900,500,400,100,90,50,40,10,9,5,4,1}; String[] strs = {"M","CM","D","CD","C","XC","L","XL","X","IX","V","IV","I"}; StringBuilder sb = new StringBuilder(); for(int i=0;i= values[i]) { num -= values[i]; sb.append(strs[i]); } } return sb.toString(); }
想要了解更多開發(fā)技術(shù),面試教程以及互聯(lián)網(wǎng)公司內(nèi)推,歡迎關(guān)注我的微信公眾號(hào)!將會(huì)不定期的發(fā)放福利哦~
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/66884.html
摘要:思路一比特位移動(dòng)將比特位逆轉(zhuǎn)過來也就是將十進(jìn)制數(shù)轉(zhuǎn)化為二進(jìn)制數(shù),再從右往左獲得每一位上的值,再將這個(gè)值添加至結(jié)果值中。根據(jù)分治思想,逆轉(zhuǎn)個(gè)比特位等價(jià)于分別將每個(gè)比特位進(jìn)行逆轉(zhuǎn)。 題目要求 Reverse bits of a given 32 bits unsigned integer. For example, given input 43261596 (represented in...
摘要:思路一比特位移動(dòng)將比特位逆轉(zhuǎn)過來也就是將十進(jìn)制數(shù)轉(zhuǎn)化為二進(jìn)制數(shù),再從右往左獲得每一位上的值,再將這個(gè)值添加至結(jié)果值中。根據(jù)分治思想,逆轉(zhuǎn)個(gè)比特位等價(jià)于分別將每個(gè)比特位進(jìn)行逆轉(zhuǎn)。 題目要求 Reverse bits of a given 32 bits unsigned integer. For example, given input 43261596 (represented in...
摘要:將羅馬數(shù)字轉(zhuǎn)化為十進(jìn)制數(shù)字上的一道簡單級(jí)別的題目將羅馬數(shù)字轉(zhuǎn)化為對(duì)應(yīng)的十進(jìn)制數(shù)字,其中羅馬數(shù)字的范圍在這題的關(guān)鍵在于了解需求,及如何將羅馬數(shù)字轉(zhuǎn)化為對(duì)應(yīng)的十進(jìn)制數(shù)字羅馬數(shù)字轉(zhuǎn)化為十進(jìn)制數(shù)字的規(guī)則為用作數(shù)字的羅馬字母共有七個(gè),即相同的數(shù)字連寫 將羅馬數(shù)字轉(zhuǎn)化為十進(jìn)制數(shù)字 Leetcode上的一道簡單級(jí)別的題目將羅馬數(shù)字轉(zhuǎn)化為對(duì)應(yīng)的十進(jìn)制數(shù)字,其中羅馬數(shù)字的范圍在1~3999 這題的關(guān)鍵在...
摘要:給定兩個(gè)二進(jìn)制字符串,返回他們的和用二進(jìn)制表示。返回的數(shù)值是以開頭,表明返回的數(shù)值是二進(jìn)制函數(shù)用于將一個(gè)字符串或數(shù)字轉(zhuǎn)換為整型。指定為非十進(jìn)制時(shí),需以字符串形式傳入從第三個(gè)元素開始截取,忽略 (python、java)Given two binary strings, return their sum (also a binary string).The input strings a...
閱讀 1057·2021-11-15 18:11
閱讀 3177·2021-09-22 15:33
閱讀 3473·2021-09-01 11:42
閱讀 2671·2021-08-24 10:03
閱讀 3632·2021-07-29 13:50
閱讀 2939·2019-08-30 14:08
閱讀 1286·2019-08-28 17:56
閱讀 2268·2019-08-26 13:57