สมมติว่าเรามีรายการตัวเลขสี่ตัว โดยแต่ละหมายเลขอยู่ในช่วง 1 ถึง 9 ในลำดับคงที่ ตอนนี้ถ้าเราวางตัวดำเนินการ +, -, * และ / (/ หมายถึงการหารจำนวนเต็ม) ระหว่างตัวเลขและจัดกลุ่มด้วยวงเล็บ เราต้องตรวจสอบว่าสามารถรับค่า 24 ได้หรือไม่
ดังนั้น หากอินพุตมีค่าเท่ากับ nums =[5, 3, 6, 8, 7] ผลลัพธ์จะเป็น True เช่น (5 * 3) - 6 + (8 + 7) =24
เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -
- กำหนดฟังก์ชัน recur() นี่จะใช้เวลา arr
- answer :=รายการใหม่
- สำหรับฉันในช่วง 0 ถึงขนาดของ arr - 1 ทำ
- pre :=recur(arr[จากดัชนี 0 ถึง i])
- suf :=เกิดขึ้นอีก (arr[จากดัชนี i + 1 ถึงปลาย])
- สำหรับแต่ละ k ใน pre ทำ
- สำหรับแต่ละ j ใน suf ทำ
- ใส่ (k + j) ต่อท้ายคำตอบ
- ใส่ (k - j) ต่อท้ายคำตอบ
- ใส่ (k * j) ต่อท้ายคำตอบ
- ถ้า j ไม่ใช่ 0 แล้ว
- แทรก (ผลหารของ k / j) ที่ท้ายคำตอบ
- สำหรับแต่ละ j ใน suf ทำ
- ถ้าขนาดของคำตอบคือ 0 และขนาดของ arr คือ 1 ดังนั้น
- ใส่ arr[0] ที่ท้ายคำตอบ
- ส่งคืนคำตอบ
- จากวิธีหลัก ให้ตรวจสอบว่า 24 เป็นซ้ำ (nums) หรือไม่ ถ้าใช่ ให้คืนค่าเป็น True ไม่เช่นนั้นจะเป็นเท็จ
ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -
ตัวอย่าง
class Solution: def solve(self, nums): def recur(arr): answer = [] for i in range(len(arr) - 1): pre, suf = recur(arr[: i + 1]), recur(arr[i + 1 :]) for k in pre: for j in suf: answer.append(k + j) answer.append(k - j) answer.append(k * j) if j != 0: answer.append(k // j) if len(answer) == 0 and len(arr) == 1: answer.append(arr[0]) return answer return 24 in recur(nums) ob = Solution() nums = [5, 3, 6, 8, 7] print(ob.solve(nums))
อินพุต
[5, 3, 6, 8, 7]
ผลลัพธ์
True