สมมติว่าเรามีรายการ 4 ตัวเลข (1-9) เรียงลำดับคงที่ วางตัวดำเนินการ +, -, *, / (หารจำนวนเต็ม) ระหว่างตัวเลข และจัดกลุ่มด้วยวงเล็บ ตรวจสอบว่าได้ค่า 24 หรือไม่
เช่น nums = [5,3,6,8,7] ให้ True เพราะ (5*3)-6+(8+7)=24
ขั้นตอนการแก้ปัญหา
- ฟังก์ชัน
recur(arr)คืนค่าทุกค่าที่เป็นไปได้จากการจัดกลุ่มและคำนวณ - แบ่ง arr เป็น pre และ suf ทุกตำแหน่ง
- คำนวณ k+j, k-j, k*j, k//j (ถ้า j!=0)
- ถ้า arr ความยาว 1 คืนค่าตัวมันเอง
- ตรวจสอบว่า 24 อยู่ในผลลัพธ์ของ
recur(nums)หรือไม่
ตัวอย่างโค้ด
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