原理分析

一个数组 data 有 N 个元素,从中选取 M 个数的组合 array(不分顺序),可使用递归算法实现,过程如下:

  • 选择 data 的第 1 个元素为 array 的第一个元素,即:array[0] = data[0];
  • 在 data 第一个元素之后的其它元素中,选取其余的 M - 1 个数,这是一个上述问题的子问题,递归即可;
  • 依次选择 data 的第 2 到 N - M + 1元素作为起始点,再执行1、2步骤;
  • 递归算法过程中的 M = 0 时,输出 array 的所有元素。

Objective-C实现

// 源数组
@property (nonatomic, strong) NSMutableArray *dataArray;
// 过度数组
@property (nonatomic, strong) NSMutableArray *tempArray;
// 结果数组
@property (nonatomic, strong) NSMutableArray *resultArray;- (void)viewDidLoad {[super viewDidLoad];self.dataArray = [[NSMutableArray alloc]init];[self.dataArray setArray:@[@"1",@"2",@"3",@"4",@"5"]];self.resultArray = [[NSMutableArray alloc]init];self.tempArray = [NSMutableArray arrayWithArray:@[@"0",@"0",@"0",@"0",@"0"]];[self combination:self.dataArray total:5 choose:5];NSLog(@"%@",self.resultArray);
}- (void)combination:(NSMutableArray *)dataArray total:(int)n choose:(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:dataArray total:i-1 choose:m-1];}
}

Swift实现

 var resultArray : [Int] = []var tempArray   : [Int] = []override func viewDidLoad() {super.viewDidLoad()self.tempArray = [0,0]self.resultArray = []var numberArray : [Int] = [0,1,6,9,8]self.combination(dataArray: numberArray, n: numberArray.count, m: self.tempArray.count)print(self.resultArray)}func combination(dataArray:[Int], n: Int, m: Int) {if m == 0 {resultArray.append(contentsOf: tempArray)return}var i = nwhile i >= m {tempArray[m - 1] = dataArray[i - 1]combination(dataArray: dataArray, n: i - 1, m: m - 1)i -= 1}}

iOS之从N个数里面取M个数的组合算法相关推荐

  1. 5个数中取三个数组合 不重复 php,PHP产生不重复随机数的5个方法总结

    <:PHP产生不重复随机数的5个方法总结>要点: 本文介绍了:PHP产生不重复随机数的5个方法总结,希望对您有用.如果有疑问,可以联系我们. 随机数都有其用武之地.在最近接触的几个小项目中 ...

  2. 【算法与数据结构】在n个数中取第k大的数(基础篇)

    (转载请注明出处:http://blog.csdn.net/buptgshengod) 题目介绍           在n个数中取第k大的数(基础篇),之所以叫基础篇是因为还有很多更高级的算法,这些以 ...

  3. C++高效率在m个单位中随机取n个单位的算法

    C++高效率在m个元素中随机取n个元素的算法 一.简述 在编程中,尤其是编写游戏的过程中经常会遇到在m个东西中取出n个东西的需求,这个时候一般人都会想到随机n个数出来,然后在原来的列表中去凑这n个数的 ...

  4. C++实现输入两个整数n和m,从数列1,2,3...n中随意取几个数,使其和等于m,要求列出所有的组合

    题目:C++实现输入两个整数n和m,从数列1,2,3...n中随意取几个数,使其和等于m,要求列出所有的组合 用到了组合的思想 #include<iostream> #include< ...

  5. ms 两个数组,从每个数组中取一个数相加,求最大的前k个和

    两个数组,从每个数组中取一个数相加,求最大的前k个和  比如:  数组A:1,2,3  数组B:4,5,6  则最大的前2个和:9,8.  ps:结果放到数组C[k]中 http://www.cnbl ...

  6. 算法--中兴面试:输入两个整数 n 和 m,从数列1,2,3.......n 中随意取几个数, 使其和等于 m

    转载请注明原文出处:http://blog.csdn.net/baidu_37107022/article/details/75125846 Q题目 编程求解 输入两个整数 n 和 m,从数列1,2, ...

  7. 输入两个整数 n 和 m ,从数列 1 , 2 , 3.......n 中随意取几个数 ,使其和等于 m

    转载自:http://blog.sina.com.cn/s/blog_7571423b01016707.html 编程求解:输入两个整数 n 和 m ,从数列 1 , 2 , 3.......n 中随 ...

  8. 数据结构专题(二):2.2单链表与顺序表,求元素个数,取值与查找

    先了解一下头结点: 头结点本身并不存在链表里面的元素信息,我们用头结点的目的是方便以后将所有元素全部找起来. 如下代码分别对应求个数,取值,查找 注意:取值的函数第二个参数是位置 查找的函数第二个参数 ...

  9. 输入两个整数n和m,从数列1,2,3,……n中随意取几个数,使其和等于m 转载

    题目:编程求解,输入两个整数n和m,从数列1,2,3,--n中随意取几个数,使其和等于m.要求将所有的可能组合列出来. 分析:分治的思想.可以把问题(m,n)拆分(m - n, n -1)和(m, n ...

最新文章

  1. 全北现代宣布江苏苏宁中后卫洪正好租借延长1年
  2. python 爬取svg数据_抓取SVG图表
  3. 异常堆栈信息丢失?到底是怎么回事?
  4. Yocto Project - basic - 01 - Quick Start
  5. Java的native方法-----你必须要知道的JAVA知识
  6. 联想成为中国女排主赞助商,却被自媒体攻击?网友:还好没赞助国足
  7. 传统白板行业调研报告 - 市场现状分析与发展前景预测(2021-2027年)
  8. C语言项目源码,C语言源代码大全(2021最新)!
  9. 深度linux 安装qq游戏,在Deepin系统下用Playonlinux完全可以运行QQ游戏大厅
  10. 科学计算机计算等比求和公式,等比数列求和公式
  11. 计算机类银行招聘考试考什么科目,计算机专业参加银行招聘考试要考哪些科目,除了行..._银行招聘考试_帮考网...
  12. (转)CSS实现一个会旋转的太极图案
  13. 杂谈随想第002篇:博客访问量破万的想法
  14. 决策树入门案例:泰坦尼克号幸存者预测
  15. 用uniapp组件写登录注册
  16. LM358电流检测电路
  17. 图标及按钮在线搜索制作工具
  18. 语音入口大战升级,Echo音箱还不是杀手锏,等所有汽车都用上Alexa就不一样了
  19. 开根号的笔算算法图解_一个数的开根号怎么计算
  20. 用支持向量机解决蠓虫分类问题matlab,分类问题

热门文章

  1. mysql中tinyint、smallint、int、bigint的区别介绍
  2. Docker 安装 For CentOS 7.4
  3. Azure 6 月新公布
  4. [Coderforces600E] Lomsat gelral
  5. M2 Planning Day3
  6. 新闻视频 36:整合首页 用到 Repeater 主要用gridview /gridview去掉边框用到 BorderWidth=”0” inner join和 left...
  7. 什么是OR MAPPING
  8. 上海Oracle高峰会感悟
  9. C语言函数题-两对儿参数的交换
  10. 每日程序C语言18-求分数序列的前20项和