具有给定数字元素的集合的组合

时间:2012-09-02 18:31:53

标签: objective-c algorithm

我试图这样做,但无法弄明白,

假设我有一套:{1,2,3,4,5}

我希望有两个元素的组合,如:

{1,2}
{1,3}
{1,4}
{1,5}
{2,3}
{2,4}
{2,5}
{3,4}
{3,5}
{4,5}

我如何在objective-c中实现它?

我已经检查了算法,但我无法弄清楚我该怎么做... 这是我之前检查过的主要网址:Algorithm to return all combinations of k elements from n

如果有人能帮助我,那我真的很开心..

问候。

2 个答案:

答案 0 :(得分:4)

只是一个嵌套循环来遍历数组的元素并将组合写入结果数组应该可以工作(这段代码经过测试并且有效):

NSArray *set = [[NSArray alloc] initWithObjects:
                [NSNumber numberWithInteger:1],
                [NSNumber numberWithInteger:2],
                [NSNumber numberWithInteger:3],
                [NSNumber numberWithInteger:4],
                [NSNumber numberWithInteger:5], nil];

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

for (NSInteger i=0; i<[set count]; i++) {
    for(NSInteger j=i+1; j<[set count]; j++){
        NSArray *newCombination = [[NSArray alloc] initWithObjects:
                                   [set objectAtIndex:i],
                                   [set objectAtIndex:j],
                                   nil];
        [combinations addObject:newCombination];
        NSLog(@"added combination %@", newCombination);
    }
}

在此嵌套循环结束时,NSMutableArray 组合包含您的所有组合。

答案 1 :(得分:1)

您可以使用2 for-loop来完成此操作。在第一个循环中,您将元素迭代为i,并在第二个循环中从值j=i+1迭代到集合中元素数量计数的末尾。

可能是这样的:

 for (i = 0; i < length_set; i++)
{
    for (j = i + 1;length_set; j++)
    {
        print ("%d%d\n", set[i], set[j]);
    }
}

}

注意:它只是一个伪代码,我没有检查语法,只是为了显示逻辑。