मान लीजिए कि हमारे पास रोमन अक्षर हैं; हमें उन्हें एक पूर्णांक में बदलना होगा। जैसा कि हम जानते हैं कि रोमन अंक नीचे दिए गए कुछ अलग प्रतीकों में प्रतिनिधित्व करते हैं -
अंक | मान |
---|---|
मैं | 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 को क्रमशः 4 और 9 बनाने के लिए V(5) और X(10) से पहले इस्तेमाल किया जा सकता है
-
X कैब का इस्तेमाल L(50) और C(100) से पहले क्रमशः 40 और 90 बनाने के लिए किया जाता है
-
सी को क्रमशः 400 और 900 बनाने के लिए डी (500) और एम (1000) से पहले इस्तेमाल किया जा सकता है।
इस मामले में, हम एक रोमन से पूर्णांक कनवर्टर बनाएंगे, जो संख्याओं को 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: #print(i) num+=roman[s[i]] i+=1 return num ob1 = Solution() print(ob1.romanToInt("III")) print(ob1.romanToInt("CDXLIII"))
इनपुट
"III" "CDXLIII"
आउटपुट
3 443