Explication détaillée de la méthode de sortie non récursive de la permutation complète de 1-N

Y2J
Libérer: 2017-04-26 11:18:51
original
1955 Les gens l'ont consulté

L'éditeur suivant vous proposera un exemple de permutation complète non récursive de sortie 1-N (recommandé). L'éditeur le trouve plutôt bon, je vais donc le partager avec vous maintenant et le donner comme référence pour tout le monde. Suivons l'éditeur et jetons un coup d'œil.

L'une des questions d'algorithme du test écrit du jeu NetEase peut être écrite en C++, Java ou Python. La quantité de code Python étant faible, j'ai choisi Python. langue.

L'idée générale de l'algorithme est de partir de l'arrangement de 1, 2, 3...N, et de continuer à calculer l'arrangement suivant jusqu'à ce que N, N-1,...1 soit sortie

Alors comment calculer la prochaine permutation pour une permutation donnée ?

Considérez la séquence [2, 3, 5, 4, 1] et recherchez la première paire de nombres adjacents croissants d'arrière en avant, c'est-à-dire 3, 5. Alors 3 est le numéro de remplacement et la position 3 est le point de remplacement.

Échangez 3 avec le plus petit nombre après le point de remplacement qui est supérieur à 3, ici c'est 4, pour obtenir [2,4,5,3,1]. Échangez ensuite le premier numéro et le dernier numéro après le point de remplacement, c'est-à-dire échangez 5,1. Vous obtiendrez la séquence suivante [2, 4, 1, 3, 5]

Le code est le suivant :

def arrange(pos_int):
  #将1-N放入列表tempList中,已方便处理
  tempList = [i+1 for i in range(pos_int)]
  print(tempList)

  while tempList != [pos_int-i for i in range(pos_int)]:
    for i in range(pos_int-1,-1,-1):
      if(tempList[i]>tempList[i-1]):
        #考虑tempList[i-1]后面比它大的元素中最小的,交换。
        minmax = min([k for k in tempList[i::] if k > tempList[i-1]])
        #得到minmax在tempList中的位置
        index = tempList.index(minmax)
        #交换
        temp = tempList[i-1]
        tempList[i-1] = tempList[index]
        tempList[index] = temp

        #再交换tempList[i]和最后一个元素,得到tempList的下一个排列
        temp = tempList[i]
        tempList[i] = tempList[pos_int-1]
        tempList[pos_int-1] = temp

        print(tempList)
        break
arrange(5)
Copier après la connexion

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!