Python 中的数组洗牌


假设我们有一个数组 A,我们需要对一组没有重复的数字进行洗牌。所以如果输入类似于 [1,2,3],那么对于洗牌,它将是 [1,3,2],重置后,如果我们再次洗牌,它将是 [2,3,1]

为了解决这个问题,我们将遵循以下步骤:

  • 将会有不同的方法。这些是 init()、reset()、shuffle()。它们的作用如下:

  • init 将类似于:

  • original := 给定数组的副本

  • temp := nums

  • indices := 从 0 到 nums 长度 - 1 的数字列表

  • reset() 将返回原始数组

  • shuffle() 将类似于:

  • 如果 temp 的长度为 0,则返回空数组

  • i := 从 indices 数组中随机选择一个索引,j := 从 indices 数组中随机选择另一个索引

  • 交换索引 i 和 j 处的元素

  • 返回 temp

  • 另一种称为 getAllPermutation() 的方法将接收 nums、i,最初 i = 0,将类似于:

  • curr := i

  • 如果 i = nums 的长度,则

    • 将 nums 数组的副本插入另一个名为 all 的数组中

    • 返回

  • 对于 j := curr 到 nums 的长度

    • 交换 nums 中索引 j 和 curr 处的元素

    • 调用 getAllPermutation(nums, curr + 1)

    • 交换 nums 中索引 j 和 curr 处的元素

让我们看看下面的实现以更好地理解:

示例

 在线演示

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]

更新于: 2020-04-30

1K+ 浏览量

开启你的 职业生涯

通过完成课程获得认证

开始学习
广告