假设我们有一个数组A,我们必须洗净一组没有重复的数字。因此,如果输入类似于[1,2,3],则对于改组,它将为[1,3,2],在重置后,如果再次进行改组,则为[2,3,1]
为了解决这个问题,我们将遵循以下步骤-
会有不同的方法。这些都是init()
,reset()
,shuffle()
。这些将如下所示-
初始化将像-
原始:=给定数组的副本
temp:= nums
index:=从0到nums – 1的数字列表
在reset()
将返回原始数组
该shuffle()
会像-
如果temp的长度为0,则返回空数组
i:=从索引数组中随机选择一个索引,j:=从索引数组中随机选择另一个索引
交换索引i和j中存在的元素
返回温度
另一个被称为getAllPermutation()
num的方法,i,最初i = 0,就像-
curr:=我
如果i = nums的长度,则
将nums数组的副本插入另一个称为all的数组中
返回
对于j:= curr到nums的长度
在索引j处交换元素并从num产生
调用getAllPermutation(nums,curr + 1)
在索引j处交换元素并从num产生
让我们看下面的实现以更好地理解-
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]