1
141
首先:闻起来像 递归 当然! 既然你还想知道这个原理,我就尽力解释了。我认为递归在大多数情况下都很容易。你只需要掌握两个步骤:
在 人类语言 :
我找到了 伪码 在 http://www.programmersheaven.com/mb/Algorithms/369713/369713/permutation-algorithm-help/ :
C.* 好的,还有更详细的内容(因为它被标记为C),来自 http://radio.weblogs.com/0111551/stories/2002/10/14/permutations.html : 相当冗长,但我还是决定复制它,所以这篇文章不依赖于原文。
ABC、ACB、BAC、BCA、驾驶室、CBA。 代码:
|
2
70
如果允许使用LINQ,那么这只是两行代码。请看我的答案 here . 编辑 下面是我的通用函数,它可以从t的列表中返回所有排列(不是组合):
例子:
输出-整数列表:
由于此函数使用Linq,因此它需要.NET 3.5或更高版本。 |
3
32
我在这里找到了解决办法。它是用Java编写的,但是我已经把它转换成C语言了。我希望它能帮助你。
这是C中的代码:
|
4
19
递归 不需要, here 是关于此解决方案的良好信息。
我已经用这个算法很多年了,它 o(n) 时间 和 空间 每种计算的复杂性 置换 .
|
6
9
首先,集合有排列,不是字符串或整数,所以我假设您的意思是“字符串中的字符集”。 请注意,一组大小为n的元素有n个!n置换。 以下伪代码(来自维基百科),用k=1…n调用!将给出所有排列:
下面是等效的python代码(用于基于0的数组索引):
|
7
6
稍微修改过的C语言版本,在任何类型的数组中产生所需的排列。
|
8
6
我喜欢 FBRYANT97 因为它很简单。不幸的是,它和许多其他“解决方案”一样,不提供所有排列,或者如果一个整数包含同一个数字多次,则不提供整数。以656123为例。线:
使用except将删除所有事件,即当c=6时,删除两位数字,并保留例如5123。因为我尝试过的所有解决方案都没有解决这个问题,所以我决定自己尝试解决它。 FBRYANT97 的代码作为基。这就是我想到的:
我只是使用.remove和.indexof删除第一个发现的事件。至少对我的使用来说是这样的。我相信它会变得更聪明。 但是有一点需要注意:结果列表可能包含重复项,因此请确保方法返回(例如哈希集),或者在返回后使用您喜欢的任何方法删除重复项。 |
9
5
这是一篇很好的文章,介绍了三种查找所有置换的算法,包括一种查找下一个置换的算法。 http://www.cut-the-knot.org/do_you_know/AllPerm.shtml C++和Python有内置的 next_permutation 和 itertools.permutations 各功能。 |
10
5
下面是一个纯粹的功能性F实现:
通过更改swap来利用clr数组的可变特性,可以大大提高性能,但是对于源数组,这种实现是线程安全的,在某些情况下可能是可取的。 此外,对于包含16个以上元素的数组,int必须替换为精度更高/任意的类型,因为factorial 17会导致int32溢出。 |
11
5
这里有一个使用递归的C中的简单解决方案,
|
12
4
这里有一个简单易懂的排列函数,用于输入字符串和整数。用这个 甚至可以设置输出长度 (正常情况下等于输入长度) 弦
为了 整数 只需更改调用方方法和 生成排列()。 保持原样:
示例1:GetAllPermutations(“abc”,3); “abc”“acb”“bac”“bca”“cab”“cba” 示例2:GetAllPermutations(“abcd”,2); “ab”“ac”“ad”“ba”“bc”“bd”“ca”“cb”“cd”“da”“db”“dc” 示例3:GetAllPermutations(486,2); 48 46 84 86 64 68 |
13
2
这是打印所有排列的函数。 此函数实现由Peter解释的逻辑。
|
14
2
下面是我的排列实现。别介意变量名,因为我是为了好玩才这么做的:)
|
15
2
下面是我写的一个高级示例,它说明了 人类语言 彼得解释说:
|
16
2
|
17
1
如果性能和内存是一个问题,我建议这个非常有效的实现。根据 Heap's algorithm in Wikipedia 它应该是最快的。希望它能满足您的需要:—)! 就像把它与一个10的LINQ实现进行比较一样!(包括代码):
|
18
1
这是我的javascript解决方案(nodejs)。主要的想法是我们一次取一个元素,从字符串中“删除它”,改变其余的字符,并在前面插入元素。
以下是测试:
|
19
1
下面是我能想到的最简单的解决方案:
这个
这个
改变
|
20
1
列出字符串的排列。避免重复字符时的重复:
|
21
0
这是一个函数,它将递归地打印所有排列。
|
22
0
|
23
0
这里有一个C答案,有点简单。
输出:
|
24
0
这是我的解决方案,我很容易理解
|
25
0
下面是上述算法的另一个实现。
|
26
0
|
27
-1
|
Wizard · 创建特定排列Python 6 年前 |
RyanP · JAVA的置换生成器方法分析 6 年前 |
stavrop · 如何从项目列表中获得顺序排列? 6 年前 |
Askold Ilvento · 在Eigen中应用逆换位 6 年前 |
Gabriel · 计算2个向量之间的断点距离 6 年前 |
Kuba KrzyżyÅski · 打印置换树python3 6 年前 |