当前位置: 首页 > 面试题库 >

生成一定长度的所有排列

程瑞
2023-03-14
问题内容

假设我们有一个字母“ abcdefghiklimnop”。如何以有效的方式递归地生成排列在FIVE组中的此字母重复的排列?

我几天来一直在为此苦苦挣扎。任何反馈将有所帮助。

本质上,这与以下操作相同:生成给定字符串的所有排列

但是,我只希望整个字符串的长度为5。我还无法弄清楚这一点。

因此,对于“
abcdefghiklimnop”的所有长度为5的所有子串,请查找子串的排列。例如,如果子字符串是abcdef,则需要该字符串的所有排列;如果子字符串是defli,则需要该子字符串的所有排列。下面的代码为我提供了字符串的所有排列,但是我想使用它来查找字符串大小为5的所有子字符串的所有排列。

    public static void permutation(String str) { 
    permutation("", str); 
}
private static void permutation(String prefix, String str) {
    int n = str.length();
    if (n == 0) System.out.println(prefix);
    else {
        for (int i = 0; i < n; i++)
            permutation(prefix + str.charAt(i), str.substring(0, i) + str.substring(i+1, n));
    }
}

问题答案:

为了递归地从字符串中选择五个字符,请遵循以下简单算法:

  • 到目前为止,您的方法应该已经填充了一部分,并且在五个字符的排列中需要字符的第一个位置
  • 如果需要角色的第一个位置高于5,则说明您已经完成;打印到目前为止的组合,然后返回
  • 否则,将每个字符放入排列中的当前位置,然后进行递归调用

这在Java中要短得多:

private static void permutation(char[] perm, int pos, String str) {
    if (pos == perm.length) {
        System.out.println(new String(perm));
    } else {
        for (int i = 0 ; i < str.length() ; i++) {
            perm[pos] = str.charAt(i);
            permutation(perm, pos+1, str);
        }
    }
}

调用者通过更改以下元素的数量来控制所需的排列长度perm

char[] perm = new char[5];
permutation(perm, 0, "abcdefghiklimnop");

演示



 类似资料:
  • 以下是我的想法: 对于列表中的每个元素,我可以删除它,然后要求递归函数返回长度的所有排列,然后将删除的数字添加到每个排列中。然后对列表中的所有数字重复此过程。 基本情况是列表为空或只包含一个元素。在这些情况下,我只返回列表。也就是说,只要k小于或等于列表的长度(例如,如果是,但是,我就不能产生任何长度排列)。 我应该如何修改这个?

  • 问题内容: 找到字符串的所有排列的一种优雅方法是什么。例如,的排列会是和,但是较长的字符串呢?有任何实现示例吗? 问题答案:

  • 本文向大家介绍PHP实现给定一列字符,生成指定长度的所有可能组合示例,包括了PHP实现给定一列字符,生成指定长度的所有可能组合示例的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了PHP实现给定一列字符,生成指定长度的所有可能组合。分享给大家供大家参考,具体如下: 给定一列字符,生成指定长度的所有可能的组合: 如:a,b,c,d,e 或 0-9  生成长度 1:a, b, c, d, e;

  • 问题内容: 我正在寻找一种生成元素列表的所有可能排列的方法。类似于python的 区别在于我不在乎排列是按需生成(例如python中的生成器)还是全部生成。我也不关心它们是否按字典顺序排序。我所需要做的就是以某种方式获得这些排列。 问题答案: 产生置换的算法很多。我发现的最简单的方法之一是堆算法: 通过选择一对要交换的元素,它会根据前一个生成每个排列。 在上面的链接中概述了这个想法和一个伪代码一个

  • 问题内容: 如何在Python中生成一个列表的所有排列,独立于该列表中元素的类型? 例如: 问题答案: 从Python 2.6(如果你使用的是Python 3)开始,你可以使用标准库工具:itertools.permutations。 如果你出于某种原因使用旧版Python(),或者只是想知道它的工作原理,那么这是一种不错的方法,取自 http://code.activestate.com/rec

  • 问题内容: java如何生成给定字符串的所有排列? 问题答案: