Computer >> Máy Tính >  >> Lập trình >> Python

Roman sang Integer trong Python


Giả sử chúng ta có các ký tự La Mã; chúng ta phải chuyển đổi chúng thành một số nguyên. Như chúng ta biết, các chữ số La Mã biểu thị bằng một số ký hiệu khác nhau như bên dưới -

Numeral Giá trị
Tôi 1
V 5
X 10
L 50
C 100
D 500
M 1000

Nếu chúng ta nhìn gần các số la mã, giống như giả sử chữ số là 'II', vì vậy đây là 2, có hai chữ ‘I được thêm vào với nhau. Đối với XII, nó là 12, vì vậy đây thực sự là X + II =10 + 2 =12. Các chữ số la mã của 4 không phải là IIII, nó là IV. Đây là một chút khó khăn.

  • Tôi có thể được sử dụng trước V (5) và X (10) để biến nó thành 4 và 9 tương ứng

  • X cab được sử dụng trước L (50) và C (100) để lần lượt là 40 và 90

  • C có thể được sử dụng trước D (500) và M (1000) để biến chúng thành 400 và 900 tương ứng.

Trong trường hợp này, chúng tôi sẽ tạo một bộ chuyển đổi số La Mã sang số nguyên, có thể chuyển đổi các số từ 1 đến 3999.

Để giải quyết vấn đề này, chúng tôi sẽ tạo một số chữ số có thể có và giá trị của chúng và một số giá trị đặc biệt như 4, 9, 40, 90, 400, 900. Bây giờ, hãy quét chuỗi đã cho, nếu một số chuỗi con có trong bảng, sau đó lấy giá trị của nó vào kết quả, sau đó kiểm tra kết quả tiếp theo, đối với kết quả tiếp theo, nó thêm giá trị với kết quả, cuối cùng tạo thành số.

Hãy cho chúng tôi xem việc triển khai để hiểu rõ hơn

Ví dụ (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"))

Đầu vào

"III"
"CDXLIII"

Đầu ra

3
443