Python程式:無需遞迴按字典序列印字串的所有排列


當需要在不使用遞迴的情況下按字典序列印字串的所有排列時,會定義一個方法,該方法將字串作為引數。它使用簡單的“for”迴圈迭代字串元素,並使用“while”條件檢查某些約束。

以下是相同內容的演示 -

示例

 線上演示

from math import factorial
def lex_permutation(my_string):
for i in range(factorial(len(my_string))):
   print(''.join(my_string))
   i = len(my_string) - 1
   while i > 0 and my_string[i-1] > my_string[i]:
      i -= 1
   my_string[i:] = reversed(my_string[i:])
   if i > 0:
      q = i
      while my_string[i-1] > my_string[q]:
         q += 1
      temp_variable = my_string[i-1]
      my_string[i-1]= my_string[q]
      my_string[q]= temp_variable

my_string = 'bhd'
print("The string is ")
print(my_string)
my_string = list(my_string)
print("The string is being sorted")
my_string.sort()
lex_permutation(my_string)

輸出

The string is
bhd
The string is being sorted
bdh
bhd
dbh
dhb
hbd
hdb

解釋

  • 匯入所需的包。

  • 定義了一個名為“lex_permutation”的方法,它將字串作為引數。

  • 它使用階乘方法並遍歷字串的階乘。

  • 比較反轉後的字串和原始字串。

  • 進行簡單的交換。

  • 在方法外部,定義字串並在控制檯上顯示。

  • 然後對其進行排序。

  • 透過傳遞此字串呼叫該方法。

  • 在控制檯上顯示輸出。

更新於: 2021年4月16日

384 次檢視

開啟你的 職業生涯

透過完成課程獲得認證

立即開始
廣告

© . All rights reserved.