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+ 瀏覽量

開啟你的 職業生涯

透過完成課程獲得認證

開始學習
廣告

© . All rights reserved.