gpt4 book ai didi

objective-c - 计算数字数组的可能排列

转载 作者:太空狗 更新时间:2023-10-30 03:48:57 25 4
gpt4 key购买 nike

我有一个包含数字 {0,1,2,3} 的 NSArray

计算 4 的阶乘(数组的计数),我有 0,1,2,3 的 24 种可能排列

我想知道是否有一种方法可以计算所有这些可能的排列并将它们放在一个单独的数组中。

例如,给定上面的数字 {0,1,2,3},得到的排列将是:

0123, 0132, 0213, 0231, 0312, 0321,
1023, 1032, 1203, 1230, 1302, 1320,
2013, 2031, 2103, 2130, 2301, 2310,
3012, 3021, 3102, 3120, 3201, 3210

非常感谢任何帮助。非常感谢!

最佳答案

我一直在寻找代码,但我设法弄明白了:)如果其他人需要它,代码如下:

static NSMutableArray *results;

void doPermute(NSMutableArray *input, NSMutableArray *output, NSMutableArray *used, int size, int level) {
if (size == level) {
NSString *word = [output componentsJoinedByString:@""];
[results addObject:word];
return;
}

level++;

for (int i = 0; i < input.count; i++) {
if ([used[i] boolValue]) {
continue;
}

used[i] = [NSNumber numberWithBool:YES];
[output addObject:input[i]];
doPermute(input, output, used, size, level);
used[i] = [NSNumber numberWithBool:NO];
[output removeLastObject];
}
}

NSArray *getPermutations(NSString *input, int size) {
results = [[NSMutableArray alloc] init];

NSMutableArray *chars = [[NSMutableArray alloc] init];


for (int i = 0; i < [input length]; i++) {
NSString *ichar = [NSString stringWithFormat:@"%c", [input characterAtIndex:i]];
[chars addObject:ichar];
}

NSMutableArray *output = [[NSMutableArray alloc] init];
NSMutableArray *used = [[NSMutableArray alloc] init];

for (int i = 0; i < chars.count; i++) {
[used addObject:[NSNumber numberWithBool:NO]];
}

doPermute(chars, output, used, size, 0);

return results;
}

使用

getPermutations(input, size)

获取存储排列的 NSArray。

例如:

NSLog(@"%@", getPermutations(@"0123", 4));

//console log
RESULTS: (
0123,
0132,
0213,
0231,
0312,
0321,
1023,
1032,
1203,
1230,
1302,
1320,
2013,
2031,
2103,
2130,
2301,
2310,
3012,
3021,
3102,
3120,
3201,
3210
)

它现在非常适合我:)

关于objective-c - 计算数字数组的可能排列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15738807/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com