ดังที่เราทราบแล้วว่าแฟกทอเรียลของจำนวนเต็มบวก n เป็นผลคูณของจำนวนเต็มบวกทั้งหมดที่น้อยกว่าหรือเท่ากับ n แฟกทอเรียล(10) =10 * 9 * 8 * 7 * 6 * 5 * 4 * 3 * 2 * 1 เราจะพยายามหาแฟกทอเรียลที่เงอะงะ:ใช้จำนวนเต็มในลำดับที่ลดลง เราสลับการดำเนินการคูณสำหรับ a การหมุนคงที่ของการดำเนินการ:คูณ (*), หาร (/), เพิ่ม (+) และลบ (-) ตามลำดับนี้
แฟกทอเรียลที่เงอะงะก็เหมือนเงอะงะ(10) =10 * 9 / 8 + 7 - 6 * 5 / 4 + 3 - 2 * 1 อย่างไรก็ตาม การดำเนินการเหล่านี้ยังคงใช้ลำดับการดำเนินการทางคณิตศาสตร์ตามปกติ:เราทำการคูณทั้งหมด และขั้นตอนการหารก่อนขั้นตอนการบวกหรือการลบใดๆ และขั้นตอนการคูณและการหารจะถูกประมวลผลจากซ้ายไปขวา การหารที่เราใช้คือการแบ่งพื้น โดย 10 * 9 / 8 เท่ากับ 11 ซึ่งรับประกันว่าผลลัพธ์จะเป็นจำนวนเต็ม
ตัวอย่างเช่น หากอินพุตคือ 10 ผลลัพธ์จะเป็น 12 เช่น 12 =10 * 9 / 8 + 7 – 6 * 5 / 4 + 3 – 2 * 1
เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -
- กำหนดโอเปอเรชั่นอาร์เรย์ และจัดเก็บโอเปอเรเตอร์ [* / + -] สร้างสแต็กว่างหนึ่งสแต็ก แล้วดัน N เข้าไปในสแต็ก
- ดัชนี :=0
- ลด N ทีละ 1
- ในขณะที่ N ไม่ใช่ 0:
- ถ้า operation[index] =* แล้ว
- หากองค์ประกอบบนสุดของสแต็กคือ>=0 ให้อัปเดตองค์ประกอบบนสุดของสแต็กเป็น top_element :=N * top_element
- มิฉะนั้น stack top element :=-1 * |N * stack top element|
- อย่างอื่นถ้า operation[index] คือ / แล้ว
- หากองค์ประกอบด้านบนของสแต็กคือ>=0 ให้อัปเดตองค์ประกอบด้านบนของสแต็กเป็น top_element :=top_element / N
- มิฉะนั้น stack top element :=-1 * |stack top element / N|
- มิฉะนั้น ถ้า operation[index] คือ + แล้ว
- แทรก N ลงในสแต็ก
- อย่างอื่นแทรก (-1 * N) ลงในกอง
- index :=(index + 1) mod length of operation array
- ลด N ทีละ 1
- ถ้า operation[index] =* แล้ว
- ส่งคืนผลรวมขององค์ประกอบสแต็ก
ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -
ตัวอย่าง
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