Roman numerals are represented by seven different symbols: I, V, X, L, C, D and M.
Symbol Value I 1 V 5 X 10 L 50 C 100 D 500 M 1000
For example, 2 is written as II in Roman numeral, just two one’s added together. 12 is written as XII, which is simply X + II. The number 27 is written as XXVII, which is XX + V + II.
I can be placed before V (5) and X (10) to make 4 and 9.
X can be placed before L (50) and C (100) to make 40 and 90.
C can be placed before D (500) and M (1000) to make 400 and 900.
Example :
Input: s = "MCMXCIV" Output: 1994 Explanation: M = 1000, CM = 900, XC = 90 and IV = 4.
Code 1:
var romanToInt = function(s) {
const romanMap: Record = { //建立羅馬轉換表
'I':1,
'V':5,
'X':10,
'L':50,
'C':100,
'D':500,
'M':1000
}
let total: number = 0 //宣告待數字加總的空間
for (let i = 0; i < s.length; i++) { //input字串決定i迴圈次數
if (romanMap[s[i]] < romanMap[s[i+1]]) { //如果 i 小於 i+1
total += romanMap[s[i+1]] - romanMap[s[i]] //羅馬數字的規則,後面數字比前面大,須將後面減前面值
i++ //i進到下一個順位
} else {
total += romanMap[s[i]]
}
}
return total
}
;
FlowChart:
i = for loop
s.length = 7 ("MCMXCIV")
step.1
i = 0
romanMap[s[i]] = "M" = 1000
romanMap[s[i+1]] = "C" = 100
else {total = 0 + 1000 = 1000}
step.2
i = 1
romanMap[s[i]] = "C" = 100
romanMap[s[i+1]] = "M" = 1000
if (100 < 1000) {total = 1000 + 1000 - 100 = 1900}
i++
step.3
i = 3
romanMap[s[i]] = "X" = 10
romanMap[s[i+1]] = "C" = 100
if (10 < 100) {total = 1900 + 100 - 10 = 1990}
i++
step.4
i = 5
romanMap[s[i]] = "I" = 1
romanMap[s[i+1]] = "V" = 5
if (1 < 5) {total = 1990 + 5 - 1 = 1994}
i++
step.5
i = 7
for i(7) < s.length(7) //條件不成立
break
Answer:
Output = 1994
Code 2:
var romanToInt = function(s) {
const romanMap: Record
'I': 1,
'V': 5,
'X': 10,
'L': 50,
'C': 100,
'D': 500,
'M': 1000
}
let i: number = 0,
total: number = 0 //宣告待數字加總的空間
while (i < s.length) { if (romanMap[s[i]] < romanMap[s[i + 1]] && i != (s.length - 1)) { total += romanMap[s[i + 1]] - romanMap[s[i]]; i += 2; } else { total += romanMap[s[i]]; i++; } } return total };