说我有一个n个元素的列表,我知道有n个!订购这些元素的可能方式.生成此列表的所有可能排序的算法是什么?例如,我有列表[a,b,c].该算法将返回[[a,b,c],[a,c,b,],[b,a,c],[b,c,a],[c,a,b],[c,b , 一个]].
我在这里阅读 http://en.wikipedia.org/wiki/Permutation#Algorithms_to_generate_permutations
但维基百科从未擅长解释.我不太了解它.
(以下关于我的问题的代码)
根据这个堆栈溢出问题,我使用Pegolon的方法生成NSString中一组字符的所有可能的排列.但是,我现在试图让它不仅生成ANAGRAM,它是相同长度的所有排列,而是字符串中所有可能的字符组合(任意长度).
谁会知道我将如何改变以下代码来实现这一目标?这很像:生成所有长度的所有排列 - 但是(因为害怕他们需要回答家庭作业)他们没有留下代码.我有一个样本,我认为会在这篇文章的底部做到这一点......但事实并非如此.
所以,代码,按原样产生the,teh,hte,het,eth和eht给定的时THE.:我需要的沿着线是t,h,e,th,ht,te,he(等)除了上述3个字符的组合.
请问如何改变这一点.(ps:这里有两种方法.我添加的allPermutationsArrayofStrings是为了将结果作为字符串返回,就像我想要的那样,而不仅仅是另一个数组中的字符数组).我假设魔法会以pc_next_permutation任何方式发生- 但我想我会提到它.
在NSArray + Permutation.h中
#import <Foundation/Foundation.h>
@interface NSArray(Permutation)
- (NSArray *)allPermutationsArrayofArrays;
- (NSArray *)allPermutationsArrayofStrings;
@end
Run Code Online (Sandbox Code Playgroud)
在NSArray + Permutation.m中:
#define MAX_PERMUTATION_COUNT 20000
NSInteger *pc_next_permutation(NSInteger *perm, const NSInteger size);
NSInteger *pc_next_permutation(NSInteger *perm, const NSInteger size)
{
// slide down the …Run Code Online (Sandbox Code Playgroud) 可能重复:
生成NSArray元素的排列
让我们说我有
[1,2]
Run Code Online (Sandbox Code Playgroud)
我想得到
{1}
{2}
{1, 2}
{2, 3}
Run Code Online (Sandbox Code Playgroud)