สมมติว่าเรามีอาร์เรย์ A เราต้องสับเปลี่ยนชุดตัวเลขโดยไม่ซ้ำกัน ดังนั้นหากอินพุตเป็น [1,2,3] สำหรับการสับเปลี่ยน มันจะเป็น [1,3,2] หลังจากรีเซ็ตแล้ว หากเราสับใหม่อีกครั้ง มันจะเป็น [2,3,1]
เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -
-
จะมีวิธีการต่างๆ สิ่งเหล่านี้คือ init(), reset(), shuffle() สิ่งเหล่านี้จะทำหน้าที่ดังต่อไปนี้ -
-
init จะเป็นแบบ −
-
ต้นฉบับ :=สำเนาของอาร์เรย์ที่กำหนด
-
อุณหภูมิ :=nums
-
ดัชนี :=รายการตัวเลขตั้งแต่ 0 ถึงความยาวของตัวเลข – 1
-
reset() จะคืนค่าอาร์เรย์เดิม
-
shuffle() จะเป็น −
-
หากความยาวของ temp เป็น 0 ให้ส่งคืนอาร์เรย์ว่าง
-
i :=เลือกสุ่มดัชนีหนึ่งจากอาร์เรย์ดัชนี j :=เลือกดัชนีอื่นจากอาร์เรย์ดัชนีแบบสุ่ม
-
สลับองค์ประกอบที่มีอยู่ในดัชนี i และ j
-
อุณหภูมิกลับ
-
วิธีอื่นที่เรียกว่า getAllPermutation() จะใช้ nums, i, ในตอนแรก i =0 จะเป็นแบบ −
-
สกุลเงิน :=ผม
-
ถ้า i =ความยาวของ nums แล้ว
-
แทรกสำเนาของอาร์เรย์ nums ลงในอาร์เรย์อื่นที่เรียกว่าทั้งหมด
-
กลับ
-
-
สำหรับ j :=curr ถึงความยาวของ nums
-
สลับองค์ประกอบที่ดัชนี j และสกุลเงินจาก nums
-
โทร getAllPermutation(nums,curr + 1)
-
สลับองค์ประกอบที่ดัชนี j และสกุลเงินจาก nums
-
ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -
ตัวอย่าง
import random class Solution(object): def __init__(self, nums): self.original = [x for x in nums] self.temp = nums self.indices = [x for x in range(len(nums))] def reset(self): return self.original def shuffle(self): if not len(self.temp): return [] i = random.choice(self.indices) j = random.choice(self.indices) self.temp[i], self.temp[j] = self.temp[j], self.temp[i] return self.temp ob = Solution([1,2,3]) print(ob.shuffle()) print(ob.reset()) print(ob.shuffle())
อินพุต
Initialize with [1,2,3] , then call shuffle(), reset() and shuffle()
ผลลัพธ์
[2, 1, 3] [1, 2, 3] [2, 3, 1]