สมมติว่าเรามีเลขโรมัน เราต้องแปลงเป็นตัวเลข ดังที่เราทราบดีว่าเลขโรมันแสดงด้วยสัญลักษณ์จากซ้ายไปขวาจากมากไปหาน้อย ข้อยกเว้นเพียงอย่างเดียวคือเมื่อแทนหนึ่งสัญลักษณ์ที่น้อยกว่า ความหมายสัญลักษณ์ตัวเลขโรมันบางส่วนมีดังนี้:
-
'ม':1,000
-
'D':500
-
'C':100
-
'L':50
-
'X':10
-
'วี':5
-
'ฉัน':1
ดังนั้น หากอินพุตเป็นตัวเลข ="MCLXVI" เอาต์พุตจะเป็น 1166 เนื่องจาก M =1000, C =100 รวมเป็น 1100 ดังนั้น L =50, X =10, VI =6 ดังนั้นผลรวมคือ 1166
เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้:
นำรายการตัวเลขตามที่กล่าวไว้ข้างต้น
-
ตอบ :=0
-
n :=ขนาดของตัวเลข
-
สำหรับแต่ละดัชนี idx และค่า c ตัวเลข ทำ
-
ถ้า idx
-
ans :=ans - d[c]
-
-
มิฉะนั้น
-
ans :=ans + d[c]
-
-
-
กลับมาอีกครั้ง
ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น:
ตัวอย่าง
class Solution:
def solve(self, numeral):
d = {"M": 1000, "D": 500, "C": 100, "L": 50, "X": 10, "V": 5, "I": 1}
ans = 0
n = len(numeral)
for (idx, c) in enumerate(numeral):
if idx < n - 1 and d[c] < d[numeral[idx + 1]]:
ans -= d[c]
else:
ans += d[c]
return ans
ob = Solution()
numeral = "MCLXVI"
print(ob.solve(numeral)) อินพุต
"MCLXVI"
ผลลัพธ์
1166