Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

เลขโรมันเป็นจำนวนเต็มใน Python

สมมติว่าเรามีตัวเลขโรมัน เราต้องแปลงเป็นจำนวนเต็ม ตามที่เรารู้ตัวเลขโรมันแทนด้วยสัญลักษณ์ที่แตกต่างกันดังนี้:

ตัวเลข ค่า
I 1
V 5
X 10
L 50
C 100
D 500
M 1000

ถ้าเราดูตัวเลขโรมันอย่างใกล้ชิด จะเห็นว่านั่นคือ เช่นตัวอักษร 'II' คือ 2 มี 'I' สองตัวบวกกัน สำหรับ XII คือ 12 นั่นคือ X + II = 10 + 2 = 12 ตัวเลขโรมันของ 4 ไม่ใช่ IIII แต่เป็น IV นี่คือส่วนที่棘手 (tricky)

  • I สามารถใช้ก่อน V(5) และ X(10) เพื่อทำให้เป็น 4 และ 9 ตามลำดับ
  • X สามารถใช้ก่อน L(50) และ C(100) เพื่อทำให้เป็น 40 และ 90 ตามลำดับ
  • C สามารถใช้ก่อน D(500) และ M(1000) เพื่อทำให้เป็น 400 และ 900 ตามลำดับ

ในกรณีนี้ เราจะสร้างตัวแปลงโรมันเป็นจำนวนเต็ม ที่สามารถแปลงตัวเลขจาก 1 ถึง 3999 ได้

ในการแก้ปัญหานี้ เราจะสร้างตัวเลขโรมันที่เป็นไปได้และค่าของมัน รวมถึงค่าพิเศษเช่น 4, 9, 40, 90, 400, 900 ตอนนี้สแกนสตริงที่กำหนด ถ้าสับสตริงบางส่วนอยู่ในตาราง ให้เอาค่าของมันไปไว้ในผลลัพธ์ แล้วตรวจสอบต่อไป สำหรับการจับคู่อันต่อไป จะบวกค่ากับผลลัพธ์ จนกว่าจะได้ตัวเลข

ตัวอย่าง (Python)

class Solution(object):
    def romanToInt(self, s):
        """
        :type s: str
        :rtype: int
        """
        roman = {'I':1,'V':5,'X':10,'L':50,'C':100,'D':500,'M':1000,'IV':4,'IX':9,'XL':40,'XC':90,'CD':400,'CM':900}
        i = 0
        num = 0
        while i < len(s):
            if i+1 < len(s) and s[i:i+2] in roman:
                num += roman[s[i:i+2]]
                i += 2
            else:
                num += roman[s[i]]
                i += 1
        return num

ob1 = Solution()
print(ob1.romanToInt("III"))
print(ob1.romanToInt("CDXLIII"))

อินพุต

"III" "CDXLIII"

เอาต์พุต

3 443