前端演算法:羅馬數字變成阿拉伯數字 羅馬數字是由七個不同的符號來表示I,V,X,L,C,D和M
阿新 • • 發佈:2018-12-23
羅馬數字是由七個不同的符號來表示I,V,X,L,C,D和M。
鍵:值
I 1
V 5
X 10
L 50
C 100
D 500
M 1000
例如,兩個用II 羅馬數字寫成,只有兩個加在一起。十二寫為,XII簡稱X+ II。數字二十七寫為XXVII,XX+ V+ II。
羅馬數字通常從左到右從最大到最小。但是,四個數字不是IIII。相反,第四個被寫為IV。因為一個在五個之前,我們減去四個。同樣的原則適用於編號為9的數字IX。
有六個使用減法的例項:
I可以在V(5)和X(10)之前放置4和9。
X可以在L(50)和C(100)之前放置40和90。
C可以在D(500)和M(1000)之前放置以產生400和900。
給定羅馬數字,將其轉換為整數。輸入保證在1到3999的範圍內。
例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。
<script> var romanToInt1 = function(s) { const map = { I: 1, V: 5, X: 10, L: 50, C: 100, D: 500, M: 1000 }; let i = s.length; let result = 0; while (i--) { const curr = map[s.charAt(i)]; const prev = map[s.charAt(i - 1)]; result += curr; if (prev < curr) { result -= prev; i -= 1; } } return result; }; console.log(romanToInt1('MCMXCIV')); // 從右側開始。如果左邊的一個索引值小於當前索引處的值,則獲取兩者的值,然後減去它們。然後,加上你的總和。最後,遞減索引以跳過它。 var romanToInt2 = function(s) { const valueMap = {"M":1000,"D":500,"C":100,"L":50,"X":10,"V":5,"I":1}; let sum = 0; for(let i = s.length-1; i >= 0; i--) { let char = valueMap[s[i]]; let nextChar = valueMap[s[i-1]]; if(nextChar < char) { sum+=(char-nextChar); i--; } else { sum+=char; } } return sum; }; console.log(romanToInt2('MCMXCIV')); </script>