iOS 从allCount个元素中取出myCount个元素的所有排列组合
来源:互联网 发布:淘宝登录名可以修改吗 编辑:程序博客网 时间:2024/06/14 23:50
#import "CombinationModel.h"
@implementation CombinationModel {
NSMutableArray *_usedArr;//识别
NSMutableArray *_resultArr;//结果
NSMutableArray *_needArr;//加入起点
int _allCount;//总数
int _myCount;//需要数
}
//初始化
- (instancetype)init {
self = [superinit];
if (self) {
[self initData];
}
return self;
}
- (void)initData {
_usedArr = [NSMutableArrayarray];
_resultArr = [NSMutableArrayarray];
_needArr = [NSMutableArrayarray];
}
#pragma mark - combination
/*
_allCount 总数, _myCount需要的数
_allCount个元素中取出_myCount个元素的所有排列
dataSource 数据源
step 初始值 0
*/
- (void)perm:(int)step dataSource:(NSMutableArray *)dataSource{
if (step == _allCount) {
//获取第一组数据
[_needArraddObject:[_resultArrmutableCopy]];
}else {
for (int i=0; i<_myCount; i++) {
if (![_usedArr[i]intValue]) {
//标识为1,表明改元素在当前组合中已排列组合
_usedArr[i] = @(1);
//加入数据
_resultArr[step] = dataSource[i];
//递归下一层组合
[self perm:(step+1) dataSource:dataSource];
//一个循环后,重新下一次排列组合,重新标识为0
_usedArr[i] = @(0);
}
}
}
}
#pragma mark - setter
- (void)setDataSource:(NSMutableArray *)dataSource {
_dataSource = dataSource;
if (_dataSource.count) {
_allCount =_myCount = (int)_dataSource.count;
//添加识别数据源
for (int i=0; i<_allCount; i++) {
[_usedArr addObject:@(0)];
}
//调用递归第0步
[self perm:0dataSource:_dataSource];
if (_needArr.count) {
[self setResultArr:_needArr];
}
}
}
//返回排列组合后的结果
- (void)setResultArr:(NSMutableArray *)resultArr {
_resultArr = resultArr;
}
//加入起点
- (NSMutableArray *)addStartPointWithCoordinate:(NSDictionary *)coor {
if (coor.count &&_resultArr.count) {
NSMutableArray *tempM = [NSMutableArrayarray];
for (NSMutableArray *singleArrin_resultArr) {
[singleArr insertObject:coor atIndex:0];
[tempM addObject:singleArr];
}
return tempM;
}
return nil;
}
//如有错误,欢迎指正!
- iOS 从allCount个元素中取出myCount个元素的所有排列组合
- 从数组中取出n个元素的所有组合(递归实现)
- 从数组中取出n个元素的所有组合(递归实现)
- 从数组中取出n个元素的所有组合(递归实现)
- 从数组中取出n个元素的所有组合(递归实现)
- 从数组中取出n个元素的所有组合(递归实现)
- 从数组中取出n个元素的所有组合(递归实现)
- 从数组中取出n个元素的所有组合(递归实现)
- 递归求解从数组中取出n个元素的所有组合
- 从数组中取出n个元素的组合
- 递归方法从m个元素中取出n个元素的算法 ------分析
- Java实现集合的组合(从组合中取出K个元素进行组合的所有情况)
- 【算法-分治】从数组中取出n个元素的所有组合(需要深入理解递归)
- 从含有M个元素的集合中任选n个的排列组合
- iOS N个数组,从每个数组中取出一个元素,组合,成为一个新的数组的集合
- 从二维数组中取出最小3个元素
- 使用回溯法求所有从n个元素中取m个元素的组合
- 如何求从n个元素中取出p个元素的组合总数,并把这些组合全部列出
- ios面向切面AOP(下) swift版本
- sicily 1209. Sequence Sum Possibi
- Java中使用AES加密的简单示例
- 3Sum Closest
- opencv实现图像细化效果
- iOS 从allCount个元素中取出myCount个元素的所有排列组合
- oracle11g 查看空表及数据库导出报“ EXP-00003: 未找到段 (0,0)
- [LeetCode]Wildcard Matching
- 第32讲 实践项目——输出小星星 1
- 动画特效十七:粘性动画
- Codeforces Round #327 (Div. 2) (B. Rebranding 字符串的操作)
- Window7中卸载Ubuntu系统
- sicily 1218. 纪念邮票
- C++基本知识(二)——vector与迭代器和数组与指针