- (NSMutableArray *)zuHeSuanFa:(NSMutableArray *)array chooseCount:(int)m
{
int n = (int)[array count];
if (m > n)
{
return nil;
}
// NSLog(@"从1到%d中取%d个数的组合。。。",n,m);
NSMutableArray *allChooseArray = [[NSMutableArray alloc] init];
NSMutableArray *retArray = [array copy];
// (1,1,1,0,0)
for(int i=0;i < n;i++)
{
if (i < m)
{
[array replaceObjectAtIndex:i withObject:@"1"];
}
else
{
[array replaceObjectAtIndex:i withObject:@"0"];
}
}
NSMutableArray *firstArray = [[NSMutableArray alloc] init];
for(int i=0; i<n; i++)
{
if ([[array objectAtIndex:i] intValue] == 1)
{
// [firstArray addObject:[NSString stringWithFormat:@"%d",i+1]];
[firstArray addObject:[retArray objectAtIndex:i]];
// NSLog(@"%d ",i+1);
}
}
[allChooseArray addObject:firstArray];
// [firstArray release];
// NSLog(@"============");
int count = 0;
for(int i = 0; i < n-1; i++)
{
if ([[array objectAtIndex:i] intValue] == 1 && [[array objectAtIndex:(i + 1)] intValue] == 0)
{
[array replaceObjectAtIndex:i withObject:@"0"];
[array replaceObjectAtIndex:(i + 1) withObject:@"1"];
// i = 2, (1,1,0,1,0)
for (int k = 0; k < i; k++)
{
if ([[array objectAtIndex:k] intValue] == 1)
{
count ++;
}
}
if (count > 0)
{
for (int k = 0; k < i; k++)
{
if (k < count)
{
// k = 1, (1,1,0,1,0)
[array replaceObjectAtIndex:k withObject:@"1"];
}
else
{
[array replaceObjectAtIndex:k withObject:@"0"];
}
}
}
NSMutableArray *middleArray = [[NSMutableArray alloc] init];
for (int k = 0; k < n; k++)
{
if ([[array objectAtIndex:k] intValue] == 1)
{
// NSLog(@"%d ",k+1);
// [middleArray addObject:[NSString stringWithFormat:@"%d",k + 1]];
[middleArray addObject:[retArray objectAtIndex:k]];
}
}
[allChooseArray addObject:middleArray];
// [middleArray release];
// NSLog(@"============");
i = -1;
count = 0;
}
}
return allChooseArray;
}