当前位置: 首页 > 知识库问答 >
问题:

迭代解决方案 :- 查找字符串排列

元鸿波
2023-03-14

我阅读了这个简单而优雅的python解决方案,用于查找给定字符串的所有排列。它是递归的。基于此,我尝试用python实现一个迭代解决方案。

下面是我的代码。但它只适用于3个字符串:(试图了解递归基本情况条件和递归条件如何转化为迭代(非递归)任何指针将有助于获得迭代解决方案的工作。(基于此算法或任何其他算法)

def  permutations_iter(word):
while True:
    perms = []
    result = []

    char = word[0]
    new_word = word[1:]

    if len(new_word)==2: 
        perms = [new_word,''.join(reversed(new_word))]

    for perm in perms: 
        #insert the character into every possible location 
        for i in range(len(perm)+1): 
            result.append(perm[:i] + char + perm[i:]) 
    return result

    if len(new_word)==2:
        break;


   #example code to call this iterative function        
   print permutations_iter("LSE")   

共有1个答案

慕铭
2023-03-14

您可以使用堆栈将每个递归转换为迭代。但是在这种情况下,它甚至更简单,因为算法非常简单。

def perms(word):
    stack = list(word)
    results = [stack.pop()]
    while len(stack) != 0:
        c = stack.pop()
        new_results = []
        for w in results:
            for i in range(len(w)+1):
                new_results.append(w[:i] + c + w[i:])
        results = new_results
    return results

对于递归到堆栈迭代的更一般的转换,请阅读以下内容

 类似资料:
  • 问题内容: 我有一个字符串迭代器。 为了进行排序,我需要从中创建一个列表并使用对其进行排序。 有没有简单的方法可以对迭代器进行排序。 问题答案: 迭代器不是容器,它是遍历容器元素的实用程序。因此,如果您仅有权访问迭代器,则无法更改此迭代器的创建者定义的迭代顺序。 如果您不能更改原始容器,则必须将迭代器传递的元素收集到新的Collection中,并在其中进行排序。 (了解迭代器可能的一种好方法是查看

  • 我试图找到给定字符串的排列,但我想使用迭代。我在网上找到的递归解决方案,我确实理解它,但是将其转换为迭代解决方案真的行不通。下面我附上了我的代码。我真的很感激你的帮助:

  • 问题内容: 我正在尝试查找给定字符串的排列,但是我想使用迭代。我在网上找到了递归解决方案,但我确实理解它,但是将其转换为迭代解决方案实际上是行不通的。下面附上我的代码。我非常感谢您的帮助: 问题答案: 在我的相关问题评论之后,这是一个Java实现,可以使用Counting QuickPerm Algorithm 来完成您想要的事情:

  • 我知道这个问题被贴了很多,我检查了一些解决方案,但没有一个完美地适合我。 我想要的是检查TextField中的Stringinput是否有效。有效条目只能是正整数,换句话说,所有>=0的条目都是整数。 多谢!

  • 我能够启动Spring Boot GraphQL Java Server(GraphQL作为运行查询的用户界面)。现在,我试图将查询字符串从GraphiQL(实际上是有效负载中发送到/graphqlendpoint的查询)传递到查询解析器类中。我尝试了不同的选择,但没有任何帮助。

  • 我试图创建一个boggle游戏的迭代方法。该类包含一个名为“Board”的2D字符串数组的字段,并有一个名为“HaveVisit”的2D布尔数组。调用test2的方法遍历整个板,查找目标字符串第一个字符的位置,然后将坐标传递给test2方法,返回一个包含坐标的列表。 return1Index方法获取一个2D数组坐标at,创建一个int表示对应的1D数组的坐标。return2DIndex则相反,返回