สมมติว่าเรามีเลขโรมัน เราต้องแปลงเป็นตัวเลข ดังที่เราทราบดีว่าเลขโรมันแสดงด้วยสัญลักษณ์จากซ้ายไปขวาจากมากไปหาน้อย ข้อยกเว้นเพียงอย่างเดียวคือเมื่อแทนหนึ่งสัญลักษณ์ที่น้อยกว่า ความหมายสัญลักษณ์ตัวเลขโรมันบางส่วนมีดังนี้:
-
'ม':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