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

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


สมมติว่าเรามีอักษรโรมัน เราต้องแปลงให้เป็นจำนวนเต็ม ดังที่เราทราบดีว่าตัวเลขโรมันแสดงด้วยสัญลักษณ์ต่างๆ ดังต่อไปนี้ -

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

ถ้าเราเห็นตัวเลขโรมันอย่างใกล้ชิด ก็เหมือนสมมติว่าตัวเลขคือ 'II' ดังนั้นนี่คือ 2 จึงมี 'I' สองตัวรวมกัน สำหรับ XII มันคือ 12 ดังนั้นนี่คือ X + II =10 + 2 =12 เลขโรมันของ 4 ไม่ใช่ IIII มันคือ IV นี้ค่อนข้างยุ่งยากเล็กน้อย

  • ฉันสามารถใช้ก่อน V(5) และ X(10) เพื่อให้เป็น 4 และ 9 ตามลำดับ

  • X cab จะใช้ก่อน 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:
            #print(i)
            num+=roman[s[i]]
            i+=1
      return num
ob1 = Solution()
print(ob1.romanToInt("III"))
print(ob1.romanToInt("CDXLIII"))

อินพุต

"III"
"CDXLIII"

ผลลัพธ์

3
443