Computer >> 컴퓨터 >  >> 프로그램 작성 >> Python

Python에서 배열 섞기

<시간/>

배열 A가 있다고 가정하고 중복 없이 숫자 집합을 섞어야 합니다. 따라서 입력이 [1,2,3]과 같으면 셔플의 경우 [1,3,2]가 되고 재설정 후 다시 셔플하면 [2,3,1]

이 문제를 해결하기 위해 다음 단계를 따릅니다. −

  • 다양한 방법이 있을 것입니다. 이들은 init(), reset(), shuffle()입니다. 다음과 같이 작동합니다 -

  • 초기화는 다음과 같습니다 -

  • 원본 :=주어진 배열의 복사본

  • temp :=숫자

  • 인덱스 :=0부터 숫자 길이까지의 숫자 목록 – 1

  • reset()은 원래 배열을 반환합니다.

  • shuffle()은 다음과 같습니다 -

  • temp의 길이가 0이면 빈 배열을 반환합니다.

  • i :=인덱스 배열에서 무작위로 하나의 인덱스 선택, j :=인덱스 배열에서 무작위로 다른 인덱스 선택

  • 인덱스 i와 j에 있는 요소를 교환

  • 반환 온도

  • getAllPermutation()이라는 다른 메서드는 숫자를 사용합니다. 처음에는 i =0이고 다음과 같습니다. -

  • 커 :=나는

  • i =숫자의 길이인 경우

    • nums 배열의 복사본을 all이라는 다른 배열에 삽입

    • 반환

  • for j :=curr to nums

    • 인덱스 j에서 요소를 교환하고 숫자에서 curr

    • getAllPermutation(숫자, curr + 1) 호출

    • 인덱스 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]