假设我们有一个字母“ 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));
}
}
为了递归地从字符串中选择五个字符,请遵循以下简单算法:
这在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如何生成给定字符串的所有排列? 问题答案: