ফ্যাক্টোরিয়াল জানি: n-এর ফ্যাক্টোরিয়াল হলো n থেকে ১ পর্যন্ত সব পজিটিভ ইন্টিজারের গুণফল। ক্লামজি ফ্যাক্টোরিয়ালে গুণ করার অপারেশনগুলো একটি ফিক্সড রোটেশন দ্বারা রিপ্লেস করা হয়: গুণ (*), ভাগ (/), যোগ (+), বিয়োগ (-) - এই ক্রমে।
clumsy(10) = 10 * 9 / 8 + 7 - 6 * 5 / 4 + 3 - 2 * 1। অপারেশনগুলোর অর্ডার অফ অপারেশন মেনে চলে: আগে গুণ এবং ভাগ (বাম থেকে ডান), তারপর যোগ এবং বিয়োগ। ভাগটি ফ্লোর ডিভিশন।
ইনপুট 10 হলে রেজাল্ট 12।
সমাধানের ধাপসমূহ
- operations অ্যারে: ["*", "/", "+", "-"], খালি স্ট্যাক, N পুশ করুন
- index := 0, N := N - 1
- যখন N != 0:
- যদি operations[index] == "*": স্ট্যাক টপ আপডেট করুন (সাইন অনুযায়ী)
- অথবা "/": স্ট্যাক টপ আপডেট করুন (ফ্লোর ডিভিশন)
- অথবা "+": N পুশ করুন
- অন্যথায়: -N পুশ করুন
- index = (index + 1) % 4, N--
- স্ট্যাকের সব এলিমেন্টের যোগফল রিটার্ন
উদাহরণ
class Solution(object):
def clumsy(self, N):
operations = ["*", "/", "+", "-"]
stack = []
index = 0
stack.append(N)
N -= 1
while N:
if operations[index] == "*":
if stack[-1] >= 0:
stack[-1] *= N
else:
stack[-1] = -1 * (abs(stack[-1]) * N)
elif operations[index] == "/":
if stack[-1] >= 0:
stack[-1] //= N
else:
stack[-1] = -1 * (abs(stack[-1]) // N)
elif operations[index] == "+":
stack.append(N)
else:
stack.append(-1 * N)
index = (index + 1) % len(operations)
N -= 1
return sum(stack)
ob = Solution()
print(ob.clumsy(10))
ইনপুট
10
আউটপুট
12