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.