สมมติว่าเรามีชุดตัวเลข เราต้องสร้างชุดย่อยที่เป็นไปได้ทั้งหมดของชุดนั้น นี้เรียกว่าชุดพลังงาน ดังนั้นหากเซตนั้นเหมือน [1,2,3] เซตกำลังจะเป็น [[], [1], [2], [3], [1,2], [1,3], [2 ,3], [1,2,3]]
ให้เราดูขั้นตอน -
- เราจะแก้ปัญหานี้โดยใช้วิธีการแบบเรียกซ้ำ ดังนั้นหากชื่อเมธอดแบบเรียกซ้ำเรียกว่า Solve() และใช้ชุดของตัวเลข (nums) ชุดชั่วคราว (temp) res และ index
- ฟังก์ชัน Solve() จะทำงานดังนี้ -
- ถ้า index =ความยาวของ nums ให้สร้างรายการเหมือนกับ temp แล้วแทรกลงใน res และ return
- อุณหภูมิ[ดัชนี] :=0
- แก้ (nums, temp, res, index + 1)
- อุณหภูมิ[ดัชนี] :=1
- แก้ (nums, temp, res, index + 1)
- หน้าที่หลักจะเป็นดังนี้ -
- res :=รายการว่าง
- สร้างรายการชั่วคราวที่มีขนาดเท่ากับ nums และเติมค่านี้ด้วย 0
- call Solve(nums, temp, res, 0)
- main_res :=รายการว่าง
- สำหรับรายการทั้งหมดใน temp_res
- อุณหภูมิ :=รายการว่าง
- สำหรับ i :=0 ถึงความยาวของรายการ
- ถ้ารายการ[i] =1 ให้ใส่ nums[i] ลงใน temp
- ใส่อุณหภูมิลงใน main_res
- ส่งคืน res หลัก
ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -
ตัวอย่าง
class Solution(object):def subsets(self, nums):temp_result =[] self.subsets_util(nums,[0 for i in range(len(nums))],temp_result,0) main_result =[] สำหรับ รายการใน temp_result:temp =[] for i in range(len(lists)):if displays[i] ==1:temp.append(nums[i]) main_result.append(temp) return main_result def subsets_util(self, nums,temp,result,index):ถ้า index ==len(nums):result.append([i for i in temp]) #print(temp) return temp[index] =0 self.subsets_util(nums,temp, ผลลัพธ์,index+1) temp[index] =1 self.subsets_util(nums, temp, result,index + 1)ob1 =Solution()print(ob1.subsets([1,2,3,4]))ก่อน>อินพุต
[1,2,3,4]ผลลัพธ์
[[], [4], [3], [3, 4], [2], [2, 4], [2, 3], [2, 3, 4], [1], [ 1, 4], [1, 3], [1, 3, 4], [1, 2], [1, 2, 4], [1, 2, 3], [1, 2, 3, 4] ]