每日一道算法:羅馬數字轉整數

2020-12-06 張德Talk

羅馬數字包含以下七種字符: I, V, X, L,C,D 和 M。

例如, 羅馬數字 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:輸入: "III"輸出: 3示例2:輸入: "IV"輸出: 4示例3:輸入: "IX"輸出: 9示例4:輸入: "LVIII"輸出: 58解釋: L = 50, V= 5, III = 3示例5:輸入: "MCMXCIV"輸出: 1994解釋: M = 1000, CM = 900, XC = 90, IV = 4說明:給定一個羅馬數字,將其轉換成整數。輸入確保在 1 到 3999 的範圍內。

解法一:循環遍歷+雙指針+哈希表映射

思路分析:

遍歷目標羅馬數字,並進行判斷若判斷是單個羅馬數字,是則直接疊加此值,並繼續往前推移判斷若判斷是兩個羅馬數字組合(6種特殊情況之一),是則按照規則計算出值併疊加,指針+1繼續往前推移判斷PHP代碼實現:

複雜度分析:

時間複雜度:O(n)解法二:循環遍歷+輔助函數+哈希表映射

思路分析:

先把羅馬數字和對應的值分別放入兩個數組(需要把特殊情況組合優先排前邊,這步很關鍵),再遍歷羅馬數字數組使用字符串函數 substr_count()和 str_replace()輔助依次疊加出現在目標值中的羅馬數字計算出相應的值,並剔除掉已出現過的羅馬數字PHP代碼實現:

複雜度分析:

時間複雜度:O(n)github

以後每次題解都會上傳到這個項目LeetCodePHP:https://github.com/zhangdejian/LeetCodePHP

題目來源

力扣(LeetCode):https://leetcode-cn.com/problems/roman-to-integer/

相關焦點

  • 素數判別和整數分解存在多項式算法
    在這一部分裡提出了兩個重要的、懸而未決的問題:是否存在判別素數的多項式算法?是否存在分解大整數的多項式算法?已知道「分解整數」這個問題是一個NP完全問題,因此對上面第二個問題的討論是解決計算機科學中的難題:「NP完全問題是否一定是多項式算法可解的?」的一個突破口。因此,素數判別和大數分解對計算機科學來說也是很有價值的。
  • 羅馬數字?
    今天再看羅馬數字,才突然發現其完全是一種不同尋常的計數方法。我們平常用的是進位計數法(二進位、十進位等),而羅馬數字完全不同。> D1000 => M有什麼發現, 最直接的, 羅馬數字的值就是將所有相加,完事.
  • 每天一道LeetCode算法題——兩數之和
    說來慚愧,算法書看了不止一本,但是看書的時候書裡的練習都沒有怎麼思考,直接看的參考答案,導致了對算法的研究僅僅停留在了解這種程度,缺乏實戰所以在平時coding中也不會將算法知識代入使用。於是開始了LeetCode刷題之旅~題目描述給定一個整數數組 nums 和一個目標值 target,請你在該數組中找出和為目標值的那 兩個 整數,並返回他們的數組下標。
  • 長URL連結轉短連結算法
    參考1、調用第三方接口自動轉2、springboot 實現長連結轉短連結轉換原理: 將原url通過一系列方式,轉換成6位短碼(只要能不重複,隨便怎麼方式都行);將長短連結存入資料庫,形成一條對應關係;訪問短連結的時候,在資料庫找到對應的長連結,並通過重定向實現原url的訪問;(如果你的轉換方式能過還原,也可以不要資料庫,但必須保證轉換後的短碼不能重複)(代碼部分和正文部分一樣的算法)缺點
  • 終於還是要講到這一篇——RSA算法原理
    注意,互質的整數不一定都是質數。3.模運算:mod,即計算餘數的運算,如x mod yn,表示x除以y的餘數是n。上述數學概念都是中學學過的,下面的定理就進入數論部分了。4.歐拉函數:對於自然數n,計算在小於等於n的自然數中,與n互質的數字的個數的函數。歐拉函數一般寫成φ(n)。
  • excel怎麼快速輸入羅馬數字
    excel怎麼快速輸入羅馬數字呢?今天教大家怎麼解決這個問題,供大家參考!步驟:1.打開要操作的excel表格2.選擇要輸入羅馬數字的單元格3.然後按下鍵盤的v4.接著按下對應數字,如1,然後選擇羅馬數字
  • 羅馬數字在人民幣認識和讀法
    第一:二.三套人民幣使用的是冠字號羅馬數字,羅馬數字有很多人不懂,當然是專業收藏和業餘收藏都認識。羅馬:lv,lll,阿拉拍數字:43羅馬數字:l,ll,lll,lv,v,vl,vll,vlll,lx.x(x,
  • 奇妙的安全旅行之RSA算法
    RSA 算法簡介RSA 算法是1977年由羅納德·李維斯特(Ron Rivest)、阿迪·薩莫爾(Adi Shamir)和倫納德·阿德曼(Leonard Adleman)一起提出的。RSA 算法既能用於加密,也能用於做數字籤名。RSA 算法非常可靠,密鑰越長,它就越難破解。
  • 教你在電腦上打出羅馬數字
    羅馬數字不知道小夥伴們熟不熟悉,羅馬數字現在主要作用於某些代碼來區分型號不同,就跟產品型號一樣。由於書寫繁瑣,現在已經很少人用到羅馬數字了。主要是一些專業人士在某些行業需要使用到,例如出版社出版的書籍用羅馬數字來分類。想知道怎麼在電腦上打出羅馬數字的,請看小編操作。
  • C++整數常量的前綴和後綴
    C++整數常量的前綴和後綴 在C/C++中,整數常量可以加上不同的前綴,表示不同的進位:十進位:不帶前綴,默認表示為十進位;八進位:0 表示八進位;十六進位:0x 或 0X 表示十六進位。
  • 「每日一學」我要刷完leetcode-0001兩數之和
    堅持推出每日學習心得與經驗,涉及考研、計算機知識、軟體開發語言、記憶力挖掘,希望總有一款適合你,就算不合適,至少知道在世界的某個角落還有一個人在每天無聊的愛著學習。來吧,如果想找到我,全網可搜;找不到呀,那私信唄。
  • 秀爾算法:破解RSA加密的「不滅神話」
    RSA加密曾被視為最可靠的加密算法,直到秀爾算法出現,打破了RSA的不滅神話。RSA加密 VS 秀爾算法作為RSA加密技術的終結者——「太多運算,無法讀取」的秀爾算法(Shor’s algorithm)不是通過暴力破解的方式找到最終密碼的,而是利用量子計算的並行性,可以快速分解出公約數,從而打破了RSA算法的基礎(即假設我們不能很有效的分解一個已知的整數)。
  • Leetcode: NO.8 字符串轉換整數 (atoi)
    題目: 連結:https://leetcode-cn.com/problems/string-to-integer-atoi 請你來實現一個 atoi 函數,使其能將字符串轉換成整數
  • 阿拉伯數字和羅馬數字如何相互轉換?萬能的 Excel 來幫你
    沒關係,萬能的 Excel 中有一對函數,可以將阿拉伯數字和羅馬數字互相轉換。阿拉伯數字轉換為文本式羅馬數字:ROMAN 函數羅馬數字轉換為阿拉伯數字:[form]:可選, 指定羅馬數字類型的數字。羅馬數字樣式的範圍從經典到簡化,隨著 form 值的增加,變得越來越簡潔。
  • 治癒系戒指,蒂芙尼經典款,atlas羅馬數字戒指價格
    蒂芙尼atlas羅馬數字戒指就是這樣神奇的存在,以羅馬數字為設計LOGO,帶有古希臘文明的神秘與復古,在傳統與現代時尚的衝擊中,蒂芙尼一向是辨識度最高的珠寶品牌之一,當然蒂芙尼atlas羅馬數字戒指不負眾望,一經市場推出就徵服了世人的內心。
  • 活動回顧| 神奇算法公益大講堂---查氏速算與魔法數學
    306(算法:第一個兩位數(17)+第二個兩位數的個位數(8)=25, 第一個數的個位數7*第二個個位數8相乘=56, 兩位數,用25的個位(5)加上56的十位(5)=30, 構成百位和十位,56的6構成個位數)11*14=(算法:第一個兩位數(11)+第二個兩位數的個位數(4)=15, 第一個數的個位數7*第二個個位數8相乘=56,1*4=4,(4是一位數
  • SoulSense 紋身 | 神秘而時尚的羅馬數字紋身
    羅馬數字是最早的數字表示方式比阿拉伯數字早 2000 多年起源於古羅馬潮人們把羅馬數符紋在身上為的是不被人一眼看穿是不是也很想紋一個神秘的羅馬數字
  • 這個夏天的小清新,蒂芙尼atlas羅馬數字戒指
    並且蒂芙尼以羅馬數字為素材,通過古希臘神話為引導,更是讓蒂芙尼戒指有了藝術化的氣息與魔力。時光荏苒,治癒我們的除了內心,還有時間。蒂芙尼也許是在告訴世人,蒂芙尼atlas羅馬數字戒指可以讓人們在欣賞美的同時學會利用時光讓自己更精彩。
  • 整數、浮點數在內存中的存儲規則
    想要搞明白這個問題,就需要了解一下整數、浮點數的存儲規則。(M) double類型有一個符號位(S),有11個指數位(E),和52個有效數字位(M) 對於E(指數)E是一個無符號整數所以E的取值範圍為(0~ 255),但是在計數中指數是可以為負的,所以規定在存入E時,在它原本的值上加上中間數(127),在使用時減去中間數(127),這樣E的真正取值範圍就成了(-127~128)。
  • 加密算法科普:des、aes加密、對稱、非對稱加密、Hash算法都是啥
    DSA (數字籤名用)常見的 Hash 算法:MD2、MD4、MD5、HAVAL、SHA、SHA-1、HMAC、HMAC-MD5、HMAC-SHA1分組加密算法中,有ECB,CBC,CFB,OFB這幾種算法模式什麼是對稱密碼算法網絡安全通信中要用到兩類密碼算法,加密一般分為對稱加密(Symmetric Key Encryption)和非對稱加密(Asymmetric Key