Giả sử chúng ta có một mảng A, chúng ta phải xáo trộn một tập hợp các số không có bản sao. Vì vậy, nếu đầu vào là [1,2,3], thì đối với xáo trộn, nó sẽ là [1,3,2], sau khi đặt lại, nếu chúng tôi xáo trộn lại, nó sẽ là [2,3,1]
Để giải quyết vấn đề này, chúng tôi sẽ làm theo các bước sau -
-
Sẽ có những phương pháp khác nhau. đây là init (), reset (), shuffle (). Những điều này sẽ hoạt động như bên dưới -
-
init sẽ như thế nào -
-
original:=bản sao của mảng đã cho
-
temp:=nums
-
chỉ số:=danh sách các số từ 0 đến độ dài là num - 1
-
reset () sẽ trả về mảng ban đầu
-
shuffle () sẽ giống như -
-
nếu độ dài tạm thời là 0, thì trả về mảng trống
-
i:=lựa chọn ngẫu nhiên một chỉ mục từ mảng chỉ số, j:=chọn một chỉ mục khác từ mảng chỉ số một cách ngẫu nhiên
-
hoán đổi các phần tử có ở chỉ mục i và j
-
trở lại nhiệt độ
-
một phương thức khác được gọi là getAllPermutation () sẽ nhận nums, i, ban đầu là i =0, sẽ giống như -
-
curr:=i
-
nếu i =độ dài của nums, thì
-
chèn một bản sao của mảng nums vào một mảng khác được gọi là tất cả
-
trở lại
-
-
for j:=curr to length of nums
-
hoán đổi các phần tử ở chỉ mục j và curr từ nums
-
gọi getAllPermutation (nums, curr + 1)
-
hoán đổi các phần tử ở chỉ mục j và curr từ nums
-
Hãy cùng chúng tôi xem cách triển khai sau để hiểu rõ hơn -
Ví dụ
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())
Đầu vào
Initialize with [1,2,3] , then call shuffle(), reset() and shuffle()
Đầu ra
[2, 1, 3] [1, 2, 3] [2, 3, 1]