摘要:將羅馬數字轉化為十進制數字上的一道簡單級別的題目將羅馬數字轉化為對應的十進制數字,其中羅馬數字的范圍在這題的關鍵在于了解需求,及如何將羅馬數字轉化為對應的十進制數字羅馬數字轉化為十進制數字的規則為用作數字的羅馬字母共有七個,即相同的數字連寫
將羅馬數字轉化為十進制數字
Leetcode上的一道簡單級別的題目
將羅馬數字轉化為對應的十進制數字,其中羅馬數字的范圍在1~3999
這題的關鍵在于了解需求,及如何將羅馬數字轉化為對應的十進制數字
羅馬數字轉化為十進制數字的規則為:
用作數字的羅馬字母共有七個,即Ⅰ(1),Ⅴ(5),Ⅹ(10),L(50),C(100),D(500),M(1000).
相同的數字連寫,所表示的數等于這些數相加
如果大的數字在前,小的數字在后,所表示的數等于這些數相加 如:VIII = 8,
如果小的數字在前,大的數字在后,所表示的數等于從大數減去小數。如:IX = 9
我的解答中使用了類似于鏈表的方法
創建兩個變量current和next分別表示當前節點和下一個節點,當當前節點和下一個節點的值不同時,則將當前temp中的值根據比較結果添加至result,并賦值temp為下一個節點的值,否則將值累加至temp
為了比較方便,我在輸入的string最后添加了一個‘O’其對應的值為0
/** * @author rale * *Given a roman numeral, convert it to an integer. *Input is guaranteed to be within the range from 1 to 3999. * */ public class RomanToInteger { public int romanToInt(String s) { //將兩個if判斷刪去后測試得到的結果性能更好 可能和測試用例有關 if(s==null || s.equals("")){ return 0; } if(s.length()==1){ return singleRomanToInt(s.charAt(0)); } s += "O"; int result = 0; char[] romanChars = s.toCharArray(); char current = romanChars[0]; char next = romanChars[1]; int temp = singleRomanToInt(current); for(int i = 0 ; inextInt){ result += temp; temp = nextInt; } } return result; } //將單個羅馬字母轉化為對應的數字 private int singleRomanToInt(char s){ int result = 0; switch(s){ case "I" : result = 1; break; case "V" : result = 5; break; case "X" : result = 10; break; case "L" : result = 50; break; case "C" : result = 100; break; case "D" : result = 500; break; case "M" : result = 1000; break; default : result = 0; break; } return result; } }
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/66840.html
摘要:解法目的就是把一個數組中所有為的數移動到數組的尾部,并保證其他元素相對位置不變。要求是在原數組上修改,不要額外引入其他的數組盡量減少操作次數。在小游戲中,設置了和界面一致的二維數組,數組的每一位記錄了一個數字。 地址:https://leetcode.com/problems/move-zeroes/ 應用場景說明 這個題是很Easy的一道題,它的應用場景是在我嘗試寫小游戲2048時,...
摘要:題目全部用做的,基本上每天一題的節奏。題目這里記錄自己對一些題目的思路和想法數字回文,說不能用額外的空間一下子懵逼了,第一概念就是換成字符串比較,但是感覺這樣子做就沒有意義了。找出任意兩條線段與軸組成的木桶,可以盛水最大的值。 前言 showImg(https://segmentfault.com/img/bVT2JE?w=1992&h=1310); 原文地址 無意間發現 LeetCo...
摘要:題目要求假設有一共個數字,從左往右開始每隔一位刪除一個數字,到達最右側后,再從右往左每隔一位刪除一個數字,如此反復,直到剩下最后一個數字。由此可見,假如我們定義一個遞歸函數我們可以有來獲取結果。 題目要求 There is a list of sorted integers from 1 to n. Starting from left to right, remove the fir...
摘要:暴力法復雜度時間空間思路如果不用空間的話,最直接的方法就是選擇一個數,然后再遍歷整個數組看是否有跟這個數相同的數就行了。二分法復雜度時間空間思路實際上,我們可以根據抽屜原理簡化剛才的暴力法。 Find the Duplicate Number Given an array nums containing n + 1 integers where each integer is bet...
摘要:例如題目解析題目的意思很明顯,就是把兩個數字加起來,需要考慮進位的情況。總結這個題目如果都能獨立完成,那么水平已經可以足以應付國內各大企業的算法面。 歡迎大家前往騰訊云+社區,獲取更多騰訊海量技術實踐干貨哦~ 本文由落影發表 前言 LeetCode上的題目是大公司面試常見的算法題,今天的目標是拿下5道算法題: 題目1是基于鏈表的大數加法,既考察基本數據結構的了解,又考察在處理加法過程中...
閱讀 1860·2021-11-22 15:24
閱讀 1316·2021-11-12 10:36
閱讀 3219·2021-09-28 09:36
閱讀 1845·2021-09-02 15:15
閱讀 2760·2019-08-30 15:54
閱讀 2400·2019-08-30 11:02
閱讀 2398·2019-08-29 13:52
閱讀 3548·2019-08-26 11:53