iOS之从N个数里面取M个数的组合算法
原理分析
一个数组 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个数的组合算法相关推荐
- 5个数中取三个数组合 不重复 php,PHP产生不重复随机数的5个方法总结
<:PHP产生不重复随机数的5个方法总结>要点: 本文介绍了:PHP产生不重复随机数的5个方法总结,希望对您有用.如果有疑问,可以联系我们. 随机数都有其用武之地.在最近接触的几个小项目中 ...
- 【算法与数据结构】在n个数中取第k大的数(基础篇)
(转载请注明出处:http://blog.csdn.net/buptgshengod) 题目介绍 在n个数中取第k大的数(基础篇),之所以叫基础篇是因为还有很多更高级的算法,这些以 ...
- C++高效率在m个单位中随机取n个单位的算法
C++高效率在m个元素中随机取n个元素的算法 一.简述 在编程中,尤其是编写游戏的过程中经常会遇到在m个东西中取出n个东西的需求,这个时候一般人都会想到随机n个数出来,然后在原来的列表中去凑这n个数的 ...
- C++实现输入两个整数n和m,从数列1,2,3...n中随意取几个数,使其和等于m,要求列出所有的组合
题目:C++实现输入两个整数n和m,从数列1,2,3...n中随意取几个数,使其和等于m,要求列出所有的组合 用到了组合的思想 #include<iostream> #include< ...
- ms 两个数组,从每个数组中取一个数相加,求最大的前k个和
两个数组,从每个数组中取一个数相加,求最大的前k个和 比如: 数组A:1,2,3 数组B:4,5,6 则最大的前2个和:9,8. ps:结果放到数组C[k]中 http://www.cnbl ...
- 算法--中兴面试:输入两个整数 n 和 m,从数列1,2,3.......n 中随意取几个数, 使其和等于 m
转载请注明原文出处:http://blog.csdn.net/baidu_37107022/article/details/75125846 Q题目 编程求解 输入两个整数 n 和 m,从数列1,2, ...
- 输入两个整数 n 和 m ,从数列 1 , 2 , 3.......n 中随意取几个数 ,使其和等于 m
转载自:http://blog.sina.com.cn/s/blog_7571423b01016707.html 编程求解:输入两个整数 n 和 m ,从数列 1 , 2 , 3.......n 中随 ...
- 数据结构专题(二):2.2单链表与顺序表,求元素个数,取值与查找
先了解一下头结点: 头结点本身并不存在链表里面的元素信息,我们用头结点的目的是方便以后将所有元素全部找起来. 如下代码分别对应求个数,取值,查找 注意:取值的函数第二个参数是位置 查找的函数第二个参数 ...
- 输入两个整数n和m,从数列1,2,3,……n中随意取几个数,使其和等于m 转载
题目:编程求解,输入两个整数n和m,从数列1,2,3,--n中随意取几个数,使其和等于m.要求将所有的可能组合列出来. 分析:分治的思想.可以把问题(m,n)拆分(m - n, n -1)和(m, n ...
最新文章
- 全北现代宣布江苏苏宁中后卫洪正好租借延长1年
- python 爬取svg数据_抓取SVG图表
- 异常堆栈信息丢失?到底是怎么回事?
- Yocto Project - basic - 01 - Quick Start
- Java的native方法-----你必须要知道的JAVA知识
- 联想成为中国女排主赞助商,却被自媒体攻击?网友:还好没赞助国足
- 传统白板行业调研报告 - 市场现状分析与发展前景预测(2021-2027年)
- C语言项目源码,C语言源代码大全(2021最新)!
- 深度linux 安装qq游戏,在Deepin系统下用Playonlinux完全可以运行QQ游戏大厅
- 科学计算机计算等比求和公式,等比数列求和公式
- 计算机类银行招聘考试考什么科目,计算机专业参加银行招聘考试要考哪些科目,除了行..._银行招聘考试_帮考网...
- (转)CSS实现一个会旋转的太极图案
- 杂谈随想第002篇:博客访问量破万的想法
- 决策树入门案例:泰坦尼克号幸存者预测
- 用uniapp组件写登录注册
- LM358电流检测电路
- 图标及按钮在线搜索制作工具
- 语音入口大战升级,Echo音箱还不是杀手锏,等所有汽车都用上Alexa就不一样了
- 开根号的笔算算法图解_一个数的开根号怎么计算
- 用支持向量机解决蠓虫分类问题matlab,分类问题
热门文章
- mysql中tinyint、smallint、int、bigint的区别介绍
- Docker 安装 For CentOS 7.4
- Azure 6 月新公布
- [Coderforces600E] Lomsat gelral
- M2 Planning Day3
- 新闻视频 36:整合首页 用到 Repeater 主要用gridview /gridview去掉边框用到 BorderWidth=”0” inner join和 left...
- 什么是OR MAPPING
- 上海Oracle高峰会感悟
- C语言函数题-两对儿参数的交换
- 每日程序C语言18-求分数序列的前20项和