मान लीजिए हमारे पास रोमन अक्षर हैं; हमें उन्हें पूर्णांक में बदलना है। जैसा कि हम जानते हैं रोमन अंक कुछ अलग प्रतीकों में दर्शाए जाते हैं:
| अंक | मान |
|---|---|
| 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 है। यह थोड़ा ट्रिकी है।
- 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 बनाएंगे। अब दी गई स्ट्रिंग को स्कैन करें, यदि कोई उपस्ट्रिंग टेबल में मौजूद है, तो उसके मान को परिणाम में लें, फिर अगले के लिए जांचें, अगले मिलान के लिए, यह मान को परिणाम के साथ जोड़ता है, अंत में संख्या बनाता है।
बेहतर समझ के लिए कार्यान्वयन देखें:
उदाहरण (पायथन)
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