sujet
Étant donné un tableau sans nombres en double nums
, renvoie toutes les permutations possibles . Vous pouvez renvoyer les réponses dans n'importe quel ordre .
Exemple 1:
**Entrée : **nums = [1,2,3]
Sortie : [[1,2,3],[1,3,2],[2,1,3],[2,3,1], [3,1,2],[3,2,1]]
Exemple 2 :
**Entrée : **nombres = [0,1]
Sortie : [[0,1],[1,0]]
Exemple 3 :
**Entrée : **numéros = [1]
Sortie : [[1]]
Idées
La version DFS de la sous-question dure cinq minutes et secondes. Il s'agit essentiellement d'un transfert d'état DFS + d'un retour en arrière d'état + d'un traitement des conditions de terminaison. Pour cette question, il faut considérer qu'à chaque fois qu'un nombre est sélectionné, un tableau est nécessaire pour enregistrez le numéro qui a été sélectionné. Chaque fois que vous sélectionnez quelque chose qui n'a pas été sélectionné, DFS reviendra en arrière sur le statut et réinitialisera la sélection à vide. Notez que List.copy est utilisé ici, sinon des problèmes surviendront si la référence est uniquement enregistré et aucune nouvelle liste n'est générée, et List. La copie n'est qu'une copie superficielle. Veuillez noter que vous devez copier au moment approprié.
code
class Solution:
def permute(self, nums: List[int]) -> List[List[int]]:
lenNums = len(nums)
numsTab = {}
for v in nums:
numsTab[v] = -1
ans = []
def DFS(cur):
if(len(cur) == lenNums):
ans.append(cur)
return
for i in range(0,lenNums):
if(numsTab[nums[i]] == -1):
numsTab[nums[i]] = 1
tempList = cur.copy()
tempList.append(nums[i])
DFS(tempList)
numsTab[nums[i]] = -1
DFS([])
return ans