本文主要是介绍OC中的组合算法 从N个数里面取M个数的组合,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
从后往前选取,选定位置i后,再在前i-1个里面选取m-1个。 如 1 2 3 4 5 中选取 3 个
1、选取5后,再在前4个里面选取2个,而前4个里面选取2个又是一个子问题,递归即可。
2、如果不包含5,直接选定4,那么再在前3个里面选取2个,而前三个里面选取2个又是一个子问题,递归即可。
3、如果也不包含4,直接选取3,那么再在前2个里面选取2个,刚好只有两个。
纵向看,1、2、3刚好是一个for循环,初值为5,终值为m
横向看,该问题为一个前i-1个中选m-1的递归。
@property (nonatomic, strong)NSMutableArray *dataArray; //源数组
@property (nonatomic, strong)NSMutableArray *tempArray;//过度数组
@property (nonatomic, strong)NSMutableArray *resultArray;//结果数组s
_dataArray = [[NSMutableArray alloc]init];
[_dataArray setArray:@[@"1",@"2",@"3",@"4",@"5",@"6",@"7",@"8",@"9"]];
_resultArray = [[NSMutableArray alloc]init];
_tempArray = [[NSMutableArray alloc]initWithCapacity:4];
[_tempArray setArray:@[@"0",@"0",@"0",@"0"]];
[self newCaculateSort];
- (void)newCaculateSort{[self combination:9 in:4];
}- (void)combination:(int)n in:(int)m{if (m == 0) {[_resultArray addObject:[NSArray arrayWithArray:_tempArray]];return;}for (int i = n; i >= m ; --i) {[_tempArray replaceObjectAtIndex:m-1 withObject:[_dataArray objectAtIndex:i-1]];[self combination:i-1 in:m-1];}
}
这篇关于OC中的组合算法 从N个数里面取M个数的组合的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!