मान लीजिए हमारे पास एक बेसबॉल गेम पॉइंट रिकॉर्डर है। हमारे पास स्ट्रिंग्स की एक सूची है; प्रत्येक स्ट्रिंग निम्न 4 प्रकारों में से एक हो सकती है:
- पूर्णांक (एक राउंड का स्कोर) - इस राउंड में प्राप्त अंकों को दर्शाता है।
- "+" (एक राउंड का स्कोर) - दर्शाता है कि इस राउंड में प्राप्त अंक पिछले दो वैध राउंड के अंकों का योग हैं।
- "D" (एक राउंड का स्कोर) - दर्शाता है कि इस राउंड में प्राप्त अंक पिछले वैध राउंड के अंकों के दोगुने हैं।
- "C" (एक ऑपरेशन, जो राउंड का स्कोर नहीं है) - दर्शाता है कि पिछले वैध राउंड के अंक अमान्य थे और उन्हें हटा दिया जाना चाहिए।
ध्यान दें कि प्रत्येक राउंड का ऑपरेशन स्थायी है और इसका असर पहले और बाद के राउंड पर पड़ सकता है। हमें सभी राउंड में प्राप्त अंकों का योग ज्ञात करना है।
उदाहरण के लिए, यदि इनपुट ["5","2","C","D","+"] है, तो आउटपुट 30 होगा। यह वास्तव में है:
- राउंड 1 - हमें 5 अंक मिले। योग: 5।
- राउंड 2 - हमें 2 अंक मिले। योग: 7।
- ऑपरेशन 1 - राउंड 2 का डेटा अमान्य था। योग: 5।
- राउंड 3 - हमें 10 अंक मिले। योग: 15।
- राउंड 4 - हमें 5 + 10 = 15 अंक मिले। योग: 30।
हल करने के चरण
- stack := खाली सूची
- ops में प्रत्येक i के लिए:
- यदि i "+" के बराबर है, तो:
- first := stack[stack का आकार - 1], second := stack[stack का आकार - 2]
- (first + second) को stack के अंत में डालें
- अन्यथा जब i "D" के बराबर है, तो:
- (stack के अंतिम तत्व * 2) को stack के अंत में डालें
- अन्यथा जब i "C" के बराबर है, तो:
- stack से अंतिम तत्व हटाएं
- अन्यथा:
- i को stack के अंत में डालें
- यदि i "+" के बराबर है, तो:
- stack के सभी तत्वों का योग वापस करें
उदाहरण
class Solution:
def calPoints(self, ops):
stack = []
for i in ops:
if i == "+":
first, second = stack[len(stack) - 1], stack[len(stack) - 2]
stack.append(first + second)
elif i == "D":
stack.append(stack[-1] * 2)
elif i == "C":
stack.pop()
else:
stack.append(int(i))
return sum(stack)
ob = Solution()
print(ob.calPoints(["5","2","C","D","+"]))
इनपुट
["5","2","C","D","+"]
आउटपुट
30