배열 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]