1
569
|
2
191
使用递归。
|
3
62
以下是我的解决方案,基于“破解编码采访”(第54页)这本书的理念:
运行字符串“abcd”的输出:
|
4
48
在这里和其他论坛给出的所有解决方案中,我最喜欢马克·拜尔斯。这种描述实际上让我自己思考和编写代码。
太糟糕了,我不能吐出他的解决方案,因为我是新手。
我更喜欢在这个线程的第一个解决方案之前使用这个解决方案,因为这个解决方案使用了StringBuffer。我不会说我的解决方案没有创建任何临时字符串(它实际上在
|
5
20
Java中的一个非常基本的解决方案是使用递归+SET(避免重复),如果您想存储和返回解决方案字符串:
|
6
15
所有以前的贡献者都在解释和提供代码方面做得很好。我想我也应该分享这种方法,因为它可能也会帮助别人。解决方案基于( heaps' algorithm ) 以下几点:
以下是发生的情况:
|
7
11
这个没有递归
|
8
9
让我们使用输入
从最后一个元素开始(
因此,整个排列:
代码:
|
9
8
这里有一个优雅的,非递归的,o(n!)解决方案:
|
10
5
一个简单的解决方案是使用两个指针递归地交换字符。
|
11
4
这对我很有用……
|
12
4
python实现
|
13
3
使用递归。 当输入为空字符串时,唯一的排列是空字符串。尝试将字符串中的每个字母设为第一个字母,然后使用递归调用查找其余字母的所有排列。
|
14
2
|
15
2
|
16
2
这里有一个简单的Java递归解决方案:
|
17
2
这是我通过对置换和递归函数调用的基本理解所做的。需要一点时间,但这是独立完成的。
它产生
产量
作为
它背后的基本逻辑是
对于每个字符,将其视为第一个字符并查找其余字符的组合。例如
然后递归地调用
|
18
2
无递归的Java实现
|
19
2
让我试着用Kotlin来解决这个问题:
核心概念:将长列表分解为小列表+递归 带示例列表的长答案[1、2、3、4]: 即使是对于一个4的列表,试图列出你头脑中所有可能的排列也会让人困惑,我们需要做的就是避免这种情况发生。对于我们来说,很容易理解如何对大小为0、1和2的列表进行所有排列,因此我们需要做的就是将它们分解为这些大小中的任何一个,并将它们正确地组合起来。想象一下一台Jackpot机器:这个算法将从右向左旋转,然后写下
|
20
1
|
21
1
我们可以使用factorial来查找有多少字符串以特定的字母开头。
示例:接受输入
|
22
1
递归 不需要,即使你可以计算 任何直接排列 ,此解决方案使用泛型排列任何数组。 Here 是关于这个算法的一个很好的信息。 为了 丙二醇 开发者 here 更有用的实现。
这个算法有 o(n) 时间 和 空间 每种计算的复杂性 置换 .
|
23
1
字符串排列:
|
24
1
这是另一种更简单的字符串排列方法。
|
25
1
一个Java实现,用于打印给定字符串的所有排列,考虑重复字符和打印唯一字符,如下:
|
26
0
//将每个字符插入到数组列表中
|
27
0
|
28
0
这可以通过在前面部分结果的所有位置依次插入字符串的每个字母来迭代完成。
我们从
运行时间是
在上述产品中,
镖样品:
|
29
0
以下是两个C版本(仅供参考): 1。打印所有排列 2。返回所有排列 该算法的基本要点是(可能下面的代码更直观-不过,下面的代码可以做一些解释): -从当前索引到集合的其余部分,在当前索引处交换元素 -从下一个索引递归获取其余元素的排列 -通过重新交换恢复顺序 注意:上面的递归函数将从开始索引调用。
版本2(与上面相同-但返回排列而不是打印)
单元测试
|
30
0
这里是一个Java实现:
|