Likou - arrangement complet

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

Je suppose que tu aimes

Origine blog.csdn.net/TongOuO/article/details/132288718
conseillé
Classement