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]
廣告
資料結構
網路
關係型資料庫管理系統
作業系統
Java
iOS
HTML
CSS
Android
Python
C 程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP