摘要:這是羅馬數字轉為十進制數的后序題目要求將十進制數字轉化為羅馬數字,數值范圍是在羅馬數字轉化為十進制數的博客中我簡單的介紹了一下如何將羅馬數字轉化為十進制數字。
這是羅馬數字轉為十進制數的后序
題目要求:將十進制數字轉化為羅馬數字,數值范圍是[1,3999]
在羅馬數字轉化為十進制數的博客中,我簡單的介紹了一下如何將羅馬數字轉化為十進制數字。在這道題目里,我們需要進一步了解十進制數轉換為羅馬數字的協議
羅馬單個數字共有7個,即I(1)、V(5)、X(10)、L(50)、C(100)、D(500)和M(1000)
可以被減去的值只有I(1)、X(10)、C(100),且每個值最多只可以減去一次
左減時不可以跨位數,例如99不能被表示為IC,而是XCIX
多個相同字母連續出現時表示相加,但是字母不能重復出現超過4次
綜上所述,個位上的數可以由I、V、X表示出來,同理,十位上的樹可以由X、L、C表示,百位上可以由C、D、M表示,千位上則為M(數字不超過3999)
所以可以分別對整數的每一位上的值進行計算,得出相應的羅馬數字值,并最后合并為最終得羅馬數字
我嘗試了兩種數據存儲方法,先嘗試了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 思路二:窮盡枚舉 因為題設中輸入羅馬數字是一定區間上的值,因此它的特殊情況是可以窮盡的
我們從個位入手來考慮每一位上較為特殊的情況==9 : IX
==5 : V
==4 : IV
<4 : I*n
也就是說,由大至小減去后剩下的值都有對應的羅馬數字存在
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(); }
想要了解更多開發技術,面試教程以及互聯網公司內推,歡迎關注我的微信公眾號!將會不定期的發放福利哦~
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/66884.html
摘要:思路一比特位移動將比特位逆轉過來也就是將十進制數轉化為二進制數,再從右往左獲得每一位上的值,再將這個值添加至結果值中。根據分治思想,逆轉個比特位等價于分別將每個比特位進行逆轉。 題目要求 Reverse bits of a given 32 bits unsigned integer. For example, given input 43261596 (represented in...
摘要:思路一比特位移動將比特位逆轉過來也就是將十進制數轉化為二進制數,再從右往左獲得每一位上的值,再將這個值添加至結果值中。根據分治思想,逆轉個比特位等價于分別將每個比特位進行逆轉。 題目要求 Reverse bits of a given 32 bits unsigned integer. For example, given input 43261596 (represented in...
摘要:將羅馬數字轉化為十進制數字上的一道簡單級別的題目將羅馬數字轉化為對應的十進制數字,其中羅馬數字的范圍在這題的關鍵在于了解需求,及如何將羅馬數字轉化為對應的十進制數字羅馬數字轉化為十進制數字的規則為用作數字的羅馬字母共有七個,即相同的數字連寫 將羅馬數字轉化為十進制數字 Leetcode上的一道簡單級別的題目將羅馬數字轉化為對應的十進制數字,其中羅馬數字的范圍在1~3999 這題的關鍵在...
摘要:給定兩個二進制字符串,返回他們的和用二進制表示。返回的數值是以開頭,表明返回的數值是二進制函數用于將一個字符串或數字轉換為整型。指定為非十進制時,需以字符串形式傳入從第三個元素開始截取,忽略 (python、java)Given two binary strings, return their sum (also a binary string).The input strings a...
閱讀 1038·2021-11-15 18:11
閱讀 3162·2021-09-22 15:33
閱讀 3458·2021-09-01 11:42
閱讀 2654·2021-08-24 10:03
閱讀 3615·2021-07-29 13:50
閱讀 2925·2019-08-30 14:08
閱讀 1274·2019-08-28 17:56
閱讀 2259·2019-08-26 13:57